我将 VS2005 VC++ 用于非托管 C++。我有 VSTS 并且正在尝试使用代码覆盖率工具来完成关于单元测试的两件事:
- 看看我有多少被测试的引用代码正在执行
- 查看我的测试代码中有多少方法(如果有)根本没有经过单元测试
设置 VSTS 代码覆盖工具(请参阅链接文本)并完成任务 #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 文件中,并且代码覆盖率工具显示它根本没有被执行过。在大多数情况下,我希望编译器为我完成这种消除,但对于代码覆盖工具,它会破坏大部分价值(例如,寻找未经测试的方法)。我已经尝试了很多方法来告诉编译器停止对我聪明并编译所有东西,但我很难过。如果代码覆盖工具能弥补这一点会很好(我想通过扫描源代码并将其与链接器输出匹配),但我没有发现任何迹象表明它有一个特殊的模式可以打开。
在此先感谢克格勃