Определение класса помечено как не охваченное - PullRequest
0 голосов
/ 11 марта 2019

Я установил Codecov для личного проекта (с открытым исходным кодом) в Qt. Проект все еще в основном незавершенный (всего пара классов, и я пытался достичь 100% покрытия на данный момент. Однако, глядя на заголовки этих двух классов в отчете Codecov, один виден как покрытый, а другой - нет, даже если для обоих из них есть модульные тесты, и они оба проходят.

Attribute coverage fails

Character coverage passes

Я проверил их обоих в Catch2:

#include "../thirdparty/catch/catch.hpp"
#include "character/attributes/attribute.h"

#define TEST_ATTRIBUTE_NAME "test-attribute"
#define TEST_ATTRIBUTE_VALUE 1

TEST_CASE("Attributes")
{
  SECTION("should create new attribute correctly (name constructor)")
  {
    character::attribute sut(TEST_ATTRIBUTE_NAME);
    REQUIRE(QString(TEST_ATTRIBUTE_NAME) == QString(sut));
    REQUIRE(0 == int(sut));
  }

  SECTION("should create new attribute correctly (name and value constructor)")
  {
    character::attribute sut(TEST_ATTRIBUTE_NAME, TEST_ATTRIBUTE_VALUE);
    REQUIRE(QString(TEST_ATTRIBUTE_NAME) == QString(sut));
    REQUIRE(TEST_ATTRIBUTE_VALUE == int(sut));
  }
}

Следуя принципу СУХОЙ, я не буду вставлять тестовый код для character::character;)

Сначала я использовал директиву using character::attribute в тесте атрибутов, поэтому я удалил ее, чтобы проверить, не вызывает ли пространство имен проблемы. Кроме того, я соответствовал модели скобок attribute, чтобы соответствовать character, но все безрезультатно.

Это не критическая проблема, но мне любопытно, что может быть причиной такого поведения и если / как это можно исправить. Кроме того, мне интересно, должен ли я на самом деле полностью отключить папку заголовков от проверок покрытия, но я думаю, что это не будет хорошей практикой.

Insights

Редактировать Глядя на вывод Кодекова на Трэвисе, я обнаружил, что есть три вхождения attribute.h. Первый отображает следующую информацию:

File '.../attributes/attribute.h'
Lines executed:100.00% of 1
No branches
Calls executed:100.00% of 1
Creating '^#...#attributes#attribute.h.gcov'

В то время как два других вхождения показывают следующее:

File '.../attributes/attribute.h'
Lines executed:0.00% of 1
No branches
Calls executed:0.00% of 1
Creating '^#...#attributes#attribute.h.gcov'

Я подозреваю, что единственный рассматриваемый экземпляр - это последний, который показывает 0% выполнений, а не character.h, который появляется в журнале только один раз.

1 Ответ

0 голосов
/ 11 марта 2019

Если вы хотите получить правильный отчет о покрытии, вам нужно запустить сборку в режиме отладки. В оптимизированной сборке будет удален код.

gcov / lcov может только многое сделать с этими пропущенными битами, и поэтому вы не видите код, помеченный как покрытый, даже если он действительно был проверен.

...