当前位置: 首页 > 知识库问答 >
问题:

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

姬烨磊
2023-03-14

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

1) 通过接口注入依赖关系。

2)通过模板注入依赖关系

这里可以找到这些选项的一个很好的讨论:C中依赖注入的接口与模板

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

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

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

例如,我试图寻求有关VisualStudio提供的代码覆盖率的帮助,但没有找到任何帮助:VisualStudio代码覆盖率来自许多不同的单元测试项目。

那么,选项1和2是获得有效代码覆盖率报告的唯一有效选项,还是有一些我不知道的工具可以满足我的需要?

我的问题不是与Visual Studio 2013专业版的代码覆盖率报告的副本。我完全能够为一个测试可执行文件生成代码覆盖。我不能做的是为多个不同项目的多个测试生成一个连贯的报告。

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

共有1个答案

翟黎明
2023-03-14

可以做到这一点的工具是来自软件验证的C覆盖率验证器。

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

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

GUI(供交互使用)或命令行支持,用于放入测试套件。数据以C覆盖验证程序的格式存储,但可以导出为HTML、XML和Cobertura XML。

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

 类似资料:
  • 新的一年 之前因为上家公司的经营出了问题,年前的大裁员,过了一个漫长的春节。 之后加入了新公司,然后正好赶上一个很紧急的项目,忙成狗,因此好久没更新文章了。 不过,我又回来啦! 前言 自动化测试,我们将使用karma和nightmare,内容会包括: 单元测试 e2e测试(放下一篇文章) 其实,单元测试一般用在写公共包的时候,比如通用的js函数库,通用的UI组件库。基本不太会在做业务项目的时候还使

  • 我正在将ANT构建转换为Maven。我不用声纳。 在Maven中,Jacoco似乎并没有报告单元测试本身的覆盖率,而ANT报告。我也一直在尝试为我的Maven build获得这个,但是我没有找到任何东西。 似乎我应该添加一个

  • 是否有人能够从Maven Build获得JaCoCo中JMockit和Powermock单元测试的复盖范围? 我有一个Powermock单元测试的现有测试集,我希望逐步将其迁移到JMockit。但是我需要能够在一个报告中看到所有单元测试的测试覆盖范围,最好是在Sonar中。 通过将JaCoCo置于“脱机”模式,我确实使JMockit和Powermock测试与Surefire/JaCoCo一起运行(

  • 问题内容: 我已经配置了EclEmma,使其无法正常运行我的单元测试。但是,编辑器仍会突出显示未涵盖的测试代码。我不希望单元测试中突出显示,因为它们没有检测到覆盖率。我怎样才能做到这一点? 问题答案: 我做了以下步骤: 转到 “首选项”- >“ Java”->“代码覆盖率”,然后 将 “仅路径条目匹配” 选项设置为 看来效果很好。

  • 我已经成功地用Karma和Webpack为我的沙盒项目设置了测试。代码覆盖率指标由伊斯坦布尔仪器加载器收集。让我困扰的是,我只得到测试中导入的模块的报告覆盖率,所以报告的100%覆盖率实际上是一个肮脏的谎言。 寻找解决方案,我在伊斯坦布尔Instrumenter Loader的自述文件中找到了一段话: 要为所有组件创建代码覆盖率报告(即使是那些尚未进行测试的组件),您必须需要所有1)源代码和2)测

  • 我可以在声纳获得单位测试覆盖率通过使用Jacoco工具的代码覆盖率,并使用其报告在声纳属性文件为'sonar.jacoco.report路径=.../Reports/report.exec'。如何通过使用RAD的默认插件获得SONAR中的单元测试覆盖率,该插件以. coveragedata、. Analysis和. html格式生成报告?