问题标签 [code-coverage]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
6010 浏览

c++ - 为什么 gcov 报告一个使用良好的类的头文件覆盖率为 0%?

我第一次尝试使用gcov测量测试覆盖率。现在我已经过了最初的学习曲线,一切似乎都很顺利,除了一点点障碍。我希望这归结为我缺乏理解,所以我希望熟悉 gcov 的人可以解释发生了什么。

问题是我有一个特定的头文件显示 0% 的覆盖率。但是,该标头中唯一的内容是一个使用良好的类的类声明。

此外,该类的实现文件显示了 100% 的覆盖率,并且我可以指出 5 个不同的测试,我知道在这些测试中该类已成功实例化。

那么为什么 gcov 会报告课程的 0% 覆盖率,我该如何解决呢?

- 编辑 -

正如 lacqui 在下面指出的,如果标头没有可执行代码,则不应将其包含在覆盖率计算中。事实上,在我所有的类中,那个特定的头文件是 gcov 试图为其生成覆盖信息的唯一一个。

我已经与其他头文件进行了逐行比较,我发现最大的不同是这个特定的头文件没有显式的构造函数或析构函数,而其他头文件有。为了尽量减少文件之间的差异,我在问题类中添加了一个显式的 ctor 和 dtor。然而,这并没有什么不同。

0 投票
2 回答
1074 浏览

c - 在不修改源代码的情况下查找多进程程序中调用了哪些函数?

我正在做一个项目,我需要在给定特定输入的情况下找到在各种 Linux 程序(用 C 编写)中调用哪些函数。我目前的方法是使用 -pg(分析选项)编译一个程序,运行它,然后通过处理 gprof 的输出来查找调用了哪些函数。只有至少被调用一次的函数才会出现在输出文件中。

明显的问题是只有一个进程可以写入 gprof 输出文件。如果程序分叉多个进程,我不会从其他进程获得任何分析输出。

有没有办法让 gprof 为每个进程生成一个输出文件(可能由 pid 标记)?该手册建议将每个进程更改为不同的目录,但我不想修改源代码来执行此操作。是否有其他适用于 Linux 的工具可以提供帮助?

0 投票
3 回答
27388 浏览

code-coverage - 有没有办法将 lcov 代码覆盖率报告集中到一个或两个目录?

我最近开始使用 lcov 来可视化我的代码覆盖率。这是一个很棒的工具。

我注意到的一件事是,它会为我正在使用的所有文件生成代码覆盖率报告——包括那些我不感兴趣的文件。例如,它会为我提供 boost 和 mysql++ 文件的代码覆盖率报告。

有没有一种简单的方法可以强制 lcov 只为特定文件生成覆盖率报告?

我尝试过使用 -k 参数,如下所示:

(这意味着我只想要“include”和“src”目录的覆盖文件。)

但是,这似乎不起作用。该报告仍然向我显示所有无关文件。任何建议都非常感谢。谢谢!

0 投票
8 回答
10276 浏览

python - 我可以将鼻子覆盖输出限制到目录(而不是包)吗?

我的 SUT 看起来像:

当我运行时nosetests --with-coverage,我会得到我宁愿忽略的各种模块的详细信息。但我不能使用该 --cover-package=PACKAGE选项,因为foo.py&bar.py不在包中。(请参阅http://lists.idyll.org/pipermail/testing-in-python/2008-November/001091.html之后的线程, 因为我没有将它们放入包中。)

我可以将覆盖范围输出限制为 foo.py 和 bar.py 吗?

更新- 假设没有比下面Nadia更好的答案,我问了一个后续问题:“我如何编写一些(bash)shell 脚本来将目录中所有匹配的文件名转换为命令行选项? "

0 投票
15 回答
14210 浏览

unit-testing - 应该测试内部实现,还是只测试公共行为?

给定软件...

  • 该系统由几个子系统组成
  • 每个子系统由几个组件组成
  • 每个组件都使用许多类来实现

...我喜欢为每个子系统或组件编写自动化测试。

我不会为组件的每个内部类编写测试(除非每个类都有助于组件的公共功能,因此可以通过组件的公共 API 从外部进行测试/测试)。

当我重构组件的实现时(我经常这样做,作为添加新功能的一部分),因此我不需要更改任何现有的自动化测试:因为测试只依赖于组件的公共 API 和公共 API通常是扩大而不是改变。

我认为该政策与Refactoring Test Code 之类的文档形成鲜明对比,该文档说...

  • “……单元测试……”
  • “......系统中每个班级的测试班......”
  • “......测试代码/生产代码比率......理想情况下被认为接近1:1的比率......”

...我想我不同意所有这些(或者至少不练习)。

我的问题是,如果您不同意我的政策,您能解释一下原因吗?这种程度的测试在什么场景下是不够的?

总之:

  • 公共接口经过测试(和重新测试),很少更改(它们被添加但很少更改)
  • 内部 API 隐藏在公共 API 之后,无需重写测试公共 API 的测试用例即可更改

脚注:我的一些“测试用例”实际上是作为数据实现的。例如,UI 的测试用例由包含各种用户输入和相应的预期系统输出的数据文件组成。测试系统意味着拥有读取每个数据文件的测试代码,将输入重放到系统中,并断言它获得了相应的预期输出。

虽然我很少需要更改测试代码(因为通常会添加而不是更改公共 API),但我确实发现有时(例如每周两次)需要更改一些现有的数据文件。当我将系统输出更改为更好(即新功能改进现有输出)时,可能会发生这种情况,这可能会导致现有测试“失败”(因为测试代码仅尝试断言输出未更改)。为了处理这些情况,我执行以下操作:

  • 重新运行自动化测试套件,其中有一个特殊的运行时标志,告诉它不要断言输出,而是将新输出捕获到新目录中
  • 使用可视化差异工具查看哪些输出数据文件(即哪些测试用例)已更改,并验证这些更改是否良好且符合新功能的预期
  • 通过将新输出文件从新目录复制到运行测试用例的目录来更新现有测试(覆盖旧测试)

脚注:“组件”是指“一个 DLL”或“一个程序集”之类的东西……大到足以在体系结构或系统部署图中可见的东西,通常使用数十个或 100 个类来实现,并且使用仅由大约 1 个或少数几个接口组成的公共 API……可以分配给一个开发团队的东西(其中不同的组件被分配给不同的团队),因此根据康威定律有一个相对稳定的公共 API。


脚注:文章面向对象测试:神话与现实说,

误区:黑盒测试就足够了。 如果您使用类接口或规范仔细地进行测试用例设计,您可以确信该类已被充分执行。白盒测试(查看方法的实现以设计测试)违反了封装的概念。

现实:OO 结构很重要,第二部分。许多研究表明,被开发人员认为极其彻底的黑盒测试套件仅在被测实现中执行了三分之一到一半的语句(更不用说路径或状态)了。这有三个原因。首先,选择的输入或状态通常使用正常路径,但不会强制所有可能的路径/状态。其次,仅靠黑盒测试无法揭示惊喜。假设我们已经测试了被测系统的所有指定行为。为了确保没有未指定的行为,我们需要知道系统的任何部分是否没有被黑盒测试套件执行过。获取此信息的唯一方法是通过代码检测。第三,

我应该补充一点,我正在做白盒功能测试:我看到代码(在实现中)并编写功能测试(驱动公共 API)来练习各种代码分支(功能实现的细节)。

0 投票
1 回答
804 浏览

c++ - 编译器生成的代码覆盖率

我正在使用 g++ 编译器在 Linux 上使用英特尔代码覆盖工具。对于特定类,覆盖工具显示的功能比源代码中实际存在的功能多 2/3。

这些额外的功能是什么?它们是编译器生成的函数吗?

我将头文件排除在代码覆盖范围之外。我的课程很简单,带有空 ctor 和 dtor。

我猜以下函数是由编译器生成的。

  1. 复制构造函数
  2. 赋值运算符
  3. 宏(在我的情况下不是)
  4. 信号槽连接机制(例如在 Qt moc 编译器中生成这些)
0 投票
3 回答
963 浏览

php - 是否有适用于手动测试的代码覆盖率工具?

在 php 中,有没有一种工具可以在不使用自动化单元测试用例的情况下生成代码覆盖率报告?

(基本上不使用 phpunit 或类似的单元测试框架,它们可以很好地生成报告,但需要用 php 编写单元测试用例!)。

正是我正在寻找的工具,它可以根据测试人员执行的手动测试为我生成代码覆盖率报告。

0 投票
8 回答
465 浏览

tdd - 我知道在编写失败的单元测试之前我可能不会编写生产代码,所以我可以告诉我的经理我不能编写 UI 吗?

我一直在使用 TDD 进行服务器端开发。我不确定将所有生产代码都包含在单元测试中的好处是否超过了花费 4 倍于重构所需时间的劣势。

但是当我在开发 UI 代码时,我根本无法应用 TDD。对于那里的所有原教旨主义者,TDD 的第一定律指出“在编写失败的单元测试之前,您不得编写生产代码”。但是,如果您正在开发 UI,这怎么可能呢?

(可以使用 Selenium 之类的验收测试框架,但这不算数,因为您不直接与源代码交互。)

那么,我可以告诉我的经理,由于新的 >90% 代码覆盖率政策,我无法编写用户界面代码吗?

0 投票
1 回答
1567 浏览

java - Emma 没有将源代码嵌入到 html 报告中

我对 Ant 和 Emma 的代码覆盖率插件有疑问,它可以生成报告,但没有源代码。

我的 build.xml 中有以下代码

初始化艾玛

制作说明

设置属性

做报告

这很好用。它输出到控制台:

我想在报告中查看我的源代码,我该如何解决?我研究了 emma 的文档,不幸的是没有任何与此问题相关的内容。

谢谢你的回答。

0 投票
1 回答
5093 浏览

teamcity - 64 位上的 NCover - CorFlags 修复 - corflags:错误 CF008:指定的文件没有有效的托管标头

我正在尝试应用修复程序以允许 NCover v1.5.5 通过我的 TeamCity 持续集成服务器在 Windows Server 2008 X64 上运行,如本博客所述:

http://abdullin.com/journal/2008/6/6/how-to-run-free-ncover-on-a-64-bit-machine.html

这是我的日志:

所以我试图应用 CorFlags 技巧使其工作,但我收到一个错误:

C:\Program Files (x86)\Microsoft.NET\SDK\v2.0\Bin>CorFlags.exe D:\TeamCity\build Agent\work\a65ff8d0771db303\tools\NCover\NCover.exe /32BIT+

Microsoft (R) .NET Framework CorFlags 转换工具。版本 2.0.50727.42 版权所有 (c) Microsoft Corporation。版权所有。

corflags:错误 CF008:指定的文件没有有效的托管标头

有任何想法吗??帮助!