有没有一种方法可以确定执行给定代码行的潜在单元测试集?换句话说,你能否自动确定不仅覆盖了给定代码行,而且实际覆盖它的测试集合?
考虑一个大型代码库,例如有50,000个单元测试。显然,运行所有测试需要很长时间--可能需要几小时甚至几天。在这样的代码库中工作时,您希望能够执行一些子集的所有单元测试,其中只包括覆盖您刚刚修改的代码行(或行)的那些测试。当然,您可以手动找到并运行这些测试,但我正在寻找一种更快、更全面的方法。
如果我正确地思考了这个问题,应该是可以做到的。一个工具可以静态遍历每个单元测试出口的所有代码路径,并得出可从该测试到达的程序片段。然后,理论上可以计算包含给定行的单元测试集的集合,这意味着该测试可以执行该行代码(“可能”而不是“将”,因为实际的代码路径将仅根据输入或其他条件在运行时确定)。一行代码可能有大量执行它的测试(例如,共享库中的代码),而其他行可能只有少量(或没有)测试覆盖它们。
所以:
我这个想法正确吗?理论上是否可行,或者有什么我遗漏的地方吗?
是否已经有一个可以做到这一点的工具?或者,这是一种常见的事情,有一个我没有听说过的名称?指向Java世界中的工具或对此问题的一般研究的指针将不胜感激。