Инициализация члена класса в заголовочных файлах вызвала неправильный отчет о покрытии lcov - PullRequest
1 голос
/ 13 марта 2019

Я создал простой пример для иллюстрации проблемы:

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-файл показывает некоторые странные результаты:

lcov report

Вопрос: почему строки 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 - как покрытая

...