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

Bob*_*bby 22 java unit-testing mutation-testing pitest

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

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

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

我试过了:

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

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

hen*_*nry 13

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

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

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

测试顺序依赖性很难发现.如果答案是肯定的,那么你可能有一个.

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

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

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

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

  • 找到设置环境变量为坑插件配置的解决方案 - <environmentVariables> <environment>test</environment> </environmentVariables> (2认同)