我创建了一个简单的示例来说明问题:
test.h
const { Tooltip, Dashicon } = wp.components;
<Tooltip text={ __( 'Select Grid' ) }>
<Dashicon icon="edit" />
</Tooltip>
test.cpp
#ifndef TEST_H
#define TEST_H
class TestCoverage{
public:
/*
*
*
*
*/
int a = 5;
int b = 10;
void testfunc();
explicit TestCoverage();
};
#endif // TEST_H
并使用catch2添加了一个简单的测试用例(不检查任何内容):
test_test.cpp
#include "test.h"
#include <iostream>
TestCoverage::TestCoverage()
{
a=15;
b=20;
}
void TestCoverage::testfunc(){
/*
*
* */
std::cout<<"hey";
}
然后,我使用lcov生成了代码覆盖率报告,并生成了html文件。 HTML文件显示了一些奇怪的结果:
问题是:为什么第11和12行显示为被遮盖?看起来它们已经完全反映了头文件中的类成员初始化(a和b初始化)。如果我在头文件中移动初始化-cpp文件中的覆盖行也会移动。 这是lcov中的错误还是我遗漏了一些东西?
UPD: 如果我使用略有更新的头文件来构建覆盖范围,例如:
#include "test.h"
#include <catch2/catch.hpp>
TEST_CASE("test", "[whatever]")
{
auto testCoverage = new TestCoverage();
testCoverage->testfunc();
}
我收到这样的报告:lcov report upd
请注意,我在头文件中交换了第12行和第13行,它反映在报告文件中。在报告文件中,第12行显示为未覆盖,第13行显示为未覆盖