Я создал простой пример для иллюстрации проблемы:
test.h
#ifndef TEST_H
#define TEST_H
class TestCoverage{
public:
/*
*
*
*
*/
int a = 5;
int b = 10;
void testfunc();
explicit TestCoverage();
};
#endif // TEST_H
test.cpp
#include "test.h"
#include <iostream>
TestCoverage::TestCoverage()
{
a=15;
b=20;
}
void TestCoverage::testfunc(){
/*
*
* */
std::cout<<"hey";
}
И добавил простой контрольный пример(который ничего не проверяет), используя catch2:
test_test.cpp
#include "test.h"
#include <catch2/catch.hpp>
TEST_CASE("test", "[whatever]")
{
auto testCoverage = new TestCoverage();
testCoverage->testfunc();
}
Впоследствии я сгенерировал отчет о покрытии кода с использованием lcov и сгенерировал HTML-файл.HTML-файл показывает некоторые странные результаты:
Вопрос: почему строки 11 и 12 отображаются как покрытые?Похоже, они полностью отражают инициализацию члена класса в заголовочном файле (инициализация a и b).Если я перемещаю инициализацию по заголовочному файлу - покрытые строки в файле cpp также перемещаются.Это ошибка в lcov или я что-то упустил?
UPD: Если я создаю покрытие с немного обновленным заголовочным файлом, например:
#ifndef TEST_H
#define TEST_H
class TestCoverage{
public:
/*
*
*
*
*/
int a = 5;
void testfunc();
int b = 10;
explicit TestCoverage();
};
#endif // TEST_H
Я получаю отчет следующим образом: lcov report upd
Обратите внимание, что я поменял местами строки 12 и 13 в заголовочном файле, и это отражено в файле отчета.В файле отчета строка 12 отображается как не покрытая, а строка 13 - как покрытая