头文件中的类成员初始化生成错误的lcov覆盖率报告

时间:2019-03-13 10:04:11

标签: c++ code-coverage lcov

我创建了一个简单的示例来说明问题:

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文件显示了一些奇怪的结果:

lcov report

问题是:为什么第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行显示为未覆盖

0 个答案:

没有答案