【发布时间】:2008-09-19 19:48:18
【问题描述】:
我将 VS2005 VC++ 用于非托管 C++。我有 VSTS 并且正在尝试使用代码覆盖率工具来完成关于单元测试的两件事:
- 查看我在测试中引用的代码有多少正在执行
- 查看我的测试代码中有多少方法(如果有)根本没有经过单元测试
设置 VSTS 代码覆盖率工具(请参阅 link text)并完成任务 #1 非常简单。然而#2对我来说是一个令人惊讶的挑战。这是我的测试代码。
class CodeCoverageTarget
{
public:
std::string ThisMethodRuns() {
return "Running";
}
std::string ThisMethodDoesNotRun() {
return "Not Running";
}
};
#include <iostream>
#include "CodeCoverageTarget.h"
using namespace std;
int main()
{
CodeCoverageTarget cct;
cout<<cct.ThisMethodRuns()<<endl;
}
当上述两个方法都在类中定义时,编译器会自动从 obj 文件中删除 ThisMethodDoesNotRun()。如果我将它的定义移到类之外,那么它会包含在 obj 文件中,并且代码覆盖率工具显示它根本没有被执行过。在大多数情况下,我希望编译器为我执行此消除,但对于代码覆盖工具,它会破坏大部分价值(例如,查找未经测试的方法)。我已经尝试了很多方法来告诉编译器停止对我聪明并编译所有内容,但我很难过。如果代码覆盖工具能弥补这一点会很好(我想通过扫描源代码并将其与链接器输出匹配),但我没有发现任何迹象表明它有一个特殊的模式可以打开。我在这里完全遗漏了一些简单的东西,还是用 VC++ 编译器 + VSTS 代码覆盖工具不可能做到这一点?
提前致谢, 克格勃
【问题讨论】:
-
我在这里问了一个相关但更通用的问题:stackoverflow.com/questions/307478/…
标签: c++ compiler-construction visual-studio-2005 code-coverage