我为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
的方括号模型以匹配character
,但无济于事。
这不是一个关键问题,但是我很好奇这可能是什么原因以及如何/如何解决此问题。另外,我想知道是否应该从覆盖范围检查中完全删除标头文件夹,但我认为这不是好习惯。
见解?
编辑在Travis的Codecov输出中,我发现attribute.h
出现了3次。第一个显示以下信息:
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
却只在日志中出现一次。
答案 0 :(得分:0)
如果要获得适当的覆盖率报告,则需要在调试模式下运行构建。优化的版本将删除一些代码。
gcov
/ lcov
只能对这些丢失的比特做很多事情,这就是为什么即使真正经过测试,您也看不到标记为覆盖的代码的原因。