JUnit测试通过,但PIT称该套件不是绿色的
在尝试运行PIT突变测试时,我收到以下错误:
mutationCoverage失败:计算线覆盖时,所有测试都没有通过而没有突变。 变异测试需要绿色套件。
当我进行正常的测试构建时,测试运行得很好但是在运行突变测试阶段时,他们认为会失败,但没有提供有关原因的详细信息。 我已经解决了PIT测试常见问题解答中列出的原因,但我仍然不知道可能出现的问题。
我试过了:
- 将-Dthreads = 1选项添加到任何multithreading问题的规则中
- 无法找到任何系统属性唯一的失败的几个测试
- 正常运行时不会忽略测试
我还应该尝试一些其他的事情吗? 或者其他方法来调试可能发生的事情?
在覆盖阶段测试失败的常见原因是
- 正常测试配置中不包括PIT拾取未包含/的测试
- 测试依赖于测试配置中设置的环境变量或其他属性,但未在pitest配置中设置
- 测试具有隐藏的顺序依赖性,在正常测试运行期间不会显示
- PIT不喜欢你的技术堆栈中的东西 – 可能是JUnit测试运行器
听起来你已经淘汰了1和2.所以留下3和4。
测试顺序依赖性很难发现。 如果对这些中的任何一个答案是肯定的,那么您可能有一个。
- 您的代码库是否包含可变的静态状态? (例如在单身人士中)
- 您的测试是否在数据库(内存或其他方面)中,测试之间状态是否可以持续存在?
- 您的测试是否修改了磁盘上的文件?
可能还有许多其他原因未在上面列出。
如果您确信在代码库中不可能存在顺序依赖性,那么这些特定测试就会出现问题。
如果没有一些代码,很难猜到这可能是什么。 您是否可以发布仍然失败的测试的简化版本?