单元测试和C ++中的测试代码覆盖率

时间:2016-11-21 17:28:07

标签: c++ visual-studio unit-testing

我正在尝试用C ++实现测试环境,它似乎比我预期的要困难得多。好像我有3个选择:

1)通过接口注入依赖。

2)Injecting dependency through templates

可以在此处找到对这些选项的良好讨论:Interfaces vs Templates for dependency injection in C++

3)为每个需要模拟/存根的测试制作不同的可执行文件。

选项1和2需要对源代码进行大量修改,而我并不是真正的粉丝。为了测试,我不应该牺牲性能/清晰度。另一方面,为每个测试制作不同的项目似乎也不是很好。

我可以接受选项3带来的开销,但我有一个我无法解决的大问题:我没有找到任何工具可以让我从多个不同的测试可执行文件报告有效的代码覆盖率。合并测试结果从不认为在一个测试中测试的线可能是在另一个测试中测试的线相同。

例如,我试图寻求有关visual studio提供的代码覆盖率的帮助,但我找不到任何帮助:Visual studio code coverage from many different unit test projects

那么,选项1和2是我唯一有效的选项来获得有效的代码覆盖率报告,还是有一些我不知道的工具会做我想做的事情?

我的问题不是Code Coverage Reporting with Visual Studio 2013 Professional for native C++的重复。我完全能够为一个测试可执行文件生成代码覆盖率。我无法做的是为多个不同项目的多个测试生成一个内聚的报告。

EX:我有我的ProjectA,有两个不同的测试项目(TestProjectA和TestProjectB)。如果我的ProjectA包含10个块,则visual studio代码覆盖率将返回20个块中的7个(而不是10个),因为它没有实现TestProjectA和TestProjectB正在测试相同的代码。

1 个答案:

答案 0 :(得分:0)

软件验证的C ++ Coverage Validator是可以做到这一点的工具。

https://www.softwareverify.com/cpp-coverage.php

它可以在每次运行时将运行合并到中央会话。或者,您也可以将事后的运行合并为一个会话。它的设计目的是,如果您正在这样做,它可以处理测试相同核心代码(在DLL,库等中)的不同测试工具。

GUI(用于交互使用)或命令行支持,用于放置测试套件。数据以C ++ Coverage Validator的格式存储,但是您可以导出为HTML,XML和Cobertura XML。

免责声明:我写了C ++ Coverage Validator。