如何告诉 PIT 不要改变代码的某些特定部分?

How to tell PIT to not mutate some specific portions of code?

碰巧有时有些代码行或方法无法产生突变体,这些突变体将被任何相关测试杀死。 (例如,我可能正在使用一个空模式对象,并且一些实现的方法与产品无关,因此任何实现(甚至抛出)都是正确的)。

如果能告诉 pit 避免它们就好了(这样突变覆盖率就更相关了),但我在文档中找不到这样做的方法。

有办法吗?

PIT 目前有三种机制可以过滤掉代码。

  1. 通过 class 使用 excludedClasses 参数
  2. 通过使用 excludedMethods
  3. 的方法
  4. 使用自定义 mutation filter

对于您的用例,选项 1 听起来很合适。

选项 2 只允许在所有 classes 中过滤一个方法(这最常用于防止 toString 或 hashcode 方法中的突变)。

选项 3 有点复杂,但可以让您(例如)过滤掉带有特定注释的方法。

现在已经多次请求通过注释进行过滤,最终可能会添加到主代码库中。它的主要问题是概念性问题,因为它要求您用测试问题污染您的生产代码。


题外话。

我没有按照您的空对象模式示例进行操作。

空对象需要实现一个接口的所有方法,预计它们被调用。如果他们抛出这将打破模式。

在该模式的最常见版本中,方法是空的,因此除了 return 个值之外没有什么可以改变的。

这种行为值得用测试来描述。如果您的 null 对象无法 return 任何被认为是中性的值,这都会导致问题。