Jef*_*eff 5 c++ code-coverage visual-studio visual-studio-2015
我正在使用VS 2015 Enterprise,我运行了一个通用的单元测试来分析代码覆盖率.我正在查看每个函数的覆盖块列表,它们通常看起来是正确的.但是,当我右键单击一个方法 - >"转到源代码"时,在某些函数上它会转到源代码中的正确位置(相关的.cpp文件),但在其他函数上它会尝试打开头文件(源行号是正确的,但代码在.cpp文件中 - 而不是.h文件.这会影响源代码突出显示 - VS认为在.h中的功能未在.cpp中突出显示.我无法确定函数的任何差异(相同的可见性,相同的头文件和源文件),除了他们被调用的线程.知道为什么VS认为某些代码是.h而不是.cpp?
显然,尽管 VS 2015 支持 C++11 功能非静态数据成员初始值设定项(它确实编译正确),但覆盖率工具却因该功能而卡住。这是 MCVE。我正在使用 VS 14.0.24720.00 Update 1。要重现,请编译此程序,然后使用Generic Test运行它来获取代码覆盖率。如果x
已初始化,覆盖工具会在 .h 文件中查找构造函数的代码。如果取出 = 0
,它会正确识别 .cpp 中的构造函数定义。在我的产品代码中,它不是构造函数,而是覆盖工具认为在 .h 文件中定义的看似随机的函数。就我而言,修复方法只是将数据成员初始化移至构造函数初始化列表。
//.h
class Test
{
public:
Test();
~Test();
void Func1();
void Func2();
void Func3();
int x = 0;
};
Run Code Online (Sandbox Code Playgroud)
。
// .cpp
#include "Test.h"
#include <iostream>
Test::Test()
{
std::cout << "in Test()" << std::endl;
}
Test::~Test()
{
}
void Test::Func1()
{
std::cout << "in Func1" << std::endl;
Func2();
Func3();
}
void Test::Func2()
{
std::cout << "in Func2" << std::endl;
}
void Test::Func3()
{
std::cout << "in Func3" << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
445 次 |
最近记录: |