gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 06:55:34 25 4
gpt4 key购买 nike

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

1) 通过接口(interface)注入(inject)依赖。

2) Injecting dependency through templates

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

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

选项 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,有 2 个不同的测试项目(TestProjectA 和 TestProjectB)。如果我的 ProjectA 包含 10 个 block ,visual studio 代码覆盖将返回覆盖的 20 个 block 中的 7 个(而不是 10 个),因为它没有意识到 TestProjectA 和 TestProjectB 正在测试相同的代码。

最佳答案

可以执行此操作的工具是 Software Verify 的 C++ Coverage Validator。

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

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

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

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

关于c++ - C++ 中的单元测试和测试代码覆盖率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40725975/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com