31

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

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

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

我试过了:

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

我应该尝试哪些其他事情?或者其他方式来调试这里可能发生的事情?

4

1 回答 1

19

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

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

听起来您已经消除了 1 和 2。所以剩下 3 和 4。

测试订单依赖性可能很难发现。如果其中任何一个的答案是肯定的,那么您可能有一个。

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

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

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

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

于 2015-06-12T08:33:09.930 回答