我在 Qt 中为个人(开源)项目设置了 Codecov。该项目仍然主要是一个存根(几乎没有几个类,到目前为止我试图实现 100% 的覆盖率。但是,查看 Codecov 报告中这两个类的标题,一个被视为已覆盖,另一个是不是,即使它们都有单元测试并且它们都通过了。
我在 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
to match character
,都无济于事。
这不是一个关键问题,但我很好奇可能导致这种行为的原因以及是否/如何修复它。另外,我想知道我是否应该从覆盖检查中完全切断 headers 文件夹,但我认为这不是一个好习惯。
洞察力?
编辑查看 Travis 上的 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
仅在日志中出现一次。