JUnit测试通过,但PIT说套件不是绿色的

尝试运行 PIT 突变测试时,我收到以下错误:

mutationCoverage 失败:在计算行覆盖率时,所有测试在没有突变的情况下均未通过。突变检测需要一个绿色套件。

当我进行正常的测试构建时,测试运行良好,但是在运行突变测试阶段时,它们可能会失败,但没有提供有关原因的详细信息。我已经了解了PIT测试常见问题解答中列出的原因,但我仍然不知道可能出了什么问题。

我试过了:

  • 将 -Dthreads=1 选项添加到任何多线程问题的规则中
  • 找不到任何系统属性,这些属性是唯一的,因为有几个测试失败了
  • 测试在正常运行下不会被忽略

我应该尝试哪些其他方法?或者其他方法来调试这里可能发生了什么?


答案 1

测试在覆盖阶段失败的常见原因是

  1. PIT 拾取测试未包含在正常测试配置中/排除在正常测试配置中
  2. 测试依赖于环境变量或测试配置中设置的其他属性,但不依赖于在最差配置中设置
  3. 测试具有隐藏的顺序依赖关系,在正常测试运行期间不会显示
  4. PIT不喜欢您的技术堆栈中的某些内容 - 可能是JUnit测试运行程序

这听起来像是你已经淘汰了1和2。所以留下3和4。

测试顺序依赖关系可能很难发现。如果答案是肯定的,你可能有一个。

  • 您的代码库是否包含可变静态状态?(例如在单例中)
  • 您的测试是否命中了一个数据库(在内存中或其他位置),在该数据库中,状态可能会在测试之间持续存在?
  • 您的测试是否会修改磁盘上的文件?

可能还有许多其他原因未在上面列出。

如果您确信在代码库中不可能实现顺序依赖关系,那么这些特定测试就会出现问题。

如果没有一些代码,很难猜测这可能是什么。您能否发布仍然失败的简化版本的测试?


答案 2

推荐