类别定义标记为未涵盖

问题描述 投票:0回答:1

我在Qt中为个人(开源)项目设置了Codecov。该项目仍然主要是一个存根(几乎没有几个类,我试图实现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));
  }
}

遵循DRY原则我不会粘贴character::character的测试代码;)

起初我在属性测试中使用了using character::attribute指令,所以我删除它以查看命名空间是否导致了麻烦。此外,我符合attribute的括号模型以匹配character,一切都无济于事。

这不是一个关键问题,但我很好奇可能导致此行为的原因以及是否/如何修复它。另外,我想知道我是否应该从覆盖检查中完全切断头文件夹,但我认为这不是一个好习惯。

见解?

编辑看看特拉维斯的Codecov输出,我发现有三次出现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,它只在日志中出现一次。

c++ qt code-coverage catch-unit-test codecov
1个回答
0
投票

如果需要适当的覆盖率报告,则需要在调试模式下运行构建。优化的构建将包含已删除的代码。

gcov / lcov只能通过这些丢失的位来做很多事情,这就是为什么你没有看到标记为覆盖的代码,即使它确实被测试过。

© www.soinside.com 2019 - 2024. All rights reserved.