【发布时间】:2011-03-12 13:45:24
【问题描述】:
有没有办法确定可能执行给定代码行的单元测试集?换句话说,您能否自动确定是否给定的行被覆盖,而是覆盖它的实际测试集?
考虑一个包含 50K 单元测试的大型代码库。显然,运行它们可能需要很长时间——即使不是几天,也可能是几个小时。在这样的代码库中工作,您希望能够执行所有单元测试的子集,仅包括那些覆盖您刚刚接触的一行(或多行)的测试。当然,您可以手动找到一些并运行它们,但我正在寻找一种更快、更全面的方法。
如果我正确地考虑了这一点,那应该是可能的。一个工具可以静态遍历从每个单元测试引出的所有代码路径,并得出一个可从该测试访问的程序片段。然后您应该(理论上)能够计算在其切片中包含给定行的单元测试集,这意味着该行可以由该测试执行(“可以”而不是“将”,因为实际的代码路径将仅在运行时根据输入或其他条件确定)。给定的代码行可能有大量执行它的测试(例如,共享库中的代码),而其他行可能只有很少(或没有)覆盖它们的测试。
所以:
我对这个想法的推理是否合理?理论上可以做到吗,还是我遗漏了什么?
是否已经有工具可以做到这一点?或者,这是一个我没有遇到过的名字的常见事情吗?指点 java 世界中的工具,或对该主题的一般研究,将不胜感激。
【问题讨论】:
标签: unit-testing code-coverage