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

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

mutationCoverage失败:计算线覆盖时,所有测试都没有通过而没有突变。 变异测试需要绿色套件。

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

我试过了:

  • 将-Dthreads = 1选项添加到任何multithreading问题的规则中
  • 无法找到任何系统属性唯一的失败的几个测试
  • 正常运行时不会忽略测试

我还应该尝试一些其他的事情吗? 或者其他方法来调试可能发生的事情?

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

  1. 正常测试配置中不包括PIT拾取未包含/的测试
  2. 测试依赖于测试配置中设置的环境变量或其他属性,但未在pitest配置中设置
  3. 测试具有隐藏的顺序依赖性,在正常测试运行期间不会显示
  4. PIT不喜欢你的技术堆栈中的东西 – 可能是JUnit测试运行器

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

测试顺序依赖性很难发现。 如果对这些中的任何一个答案是肯定的,那么您可能有一个。

  • 您的代码库是否包含可变的静态状态? (例如在单身人士中)
  • 您的测试是否在数据库(内存或其他方面)中,测试之间状态是否可以持续存在?
  • 您的测试是否修改了磁盘上的文件?

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

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

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