unit-testing - 确定哪些测试覆盖一行代码

标签 unit-testing code-coverage

有没有办法确定可能执行给定代码行的单元测试集?换句话说,您能否不仅自动确定给定的行是否被覆盖,还可以自动确定覆盖它的实际测试集?

考虑一个包含 50K 单元测试的大型代码库。显然,如果不是数天,则可能需要很长时间才能全天运行它们。在这样的代码库中工作,您希望能够执行一些 子集在所有单元测试中,仅包括那些覆盖您刚刚触及的一行(或几行)的测试。当然,您可以手动找到一些并运行它们,但我正在寻找一种更快、更全面的方法。

如果我正确地考虑这一点,那应该是可能的。一个工具可以静态地遍历从每个单元测试引出的所有代码路径,并提出该测试可访问的程序片段。然后您应该(理论上)能够计算在其切片中包含给定行的单元测试集,这意味着该行可以由该测试执行(“可以”而不是“将”,因为实际的代码路径将只能在运行时根据输入或其他条件确定)。给定的代码行可能有大量的测试来执行它(例如,共享库中的代码),而其他行可能只有很少(或没有)测试覆盖它们。

所以:

  • 我的推理对这个想法合理吗?理论上可以完成,还是我遗漏了什么?
  • 是否已经有一种工具可以做到这一点?或者,这是一个我没有遇到过的名字的常见事物吗?将不胜感激指向 java 世界中的工具或对该主题的一般研究的指针。
  • 最佳答案

    我很确定 Clover将向您展示哪些测试验证了每一行代码。因此,您可以通过查看覆盖率报告来手动执行测试。他们还有一个新的 API您可以使用它来编写一个 IDE 插件,该插件可以让您执行涵盖一行代码的测试。

    关于unit-testing - 确定哪些测试覆盖一行代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3190807/

    相关文章:

    unit-testing - 当您运行单元测试时,Play Framework 会自动删除数据库中的所有记录

    unit-testing - 分支覆盖和线路覆盖一样有用吗?

    java - Hudson 没有意识到我在构建后执行了任何测试 - 有什么想法吗?

    php - 如何在没有 PHPUnit 的情况下使用 PHP_CodeCoverage?

    ios6 - 如何使用iOS版gcovr生成Cobertura格式的xml文件?

    java - 如何针对测试数据库运行“放心”?

    unit-testing - 使用ESP-IDF进行单元测试

    java - Spring 单元测试和 InitialContext

    c# - 使用 Moq 对方法进行单元测试

    go - 以编程方式获取 golang 覆盖率