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

时间:2015-06-11 19:12:21

标签: java unit-testing mutation-testing pitest

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

  

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

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

我试过了:

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

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

1 个答案:

答案 0 :(得分:12)

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

  1. 正常测试配置
  2. 中不包括PIT拾取未包含/的测试
  3. 测试依赖于测试配置中设置的环境变量或其他属性,但未在pitest config中设置
  4. 测试具有隐藏的顺序依赖关系,在正常测试运行期间未显示
  5. PIT不喜欢你的技术堆栈中的东西 - 可能是JUnit测试跑步者
  6. 听起来你已经淘汰了1& 2.留下3和4叶。

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

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

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

    如果您确信代码库中的订单依赖性是不可能的,那么这些特定测试就会出现问题。

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