突变杀伤

Mutation killing

我卡在了 1 点,需要建议。

在为我的代码编写 junit 时,我无法终止 ValidateArgument.notNull(arg1) 突变!!!
需要建议。

代码如下..

public class A{

  public void method1(Object B){

          ValidateArgument.notNull(B);
          ..
          ..
          ..
  }
}

得到

## removed call to com/nokia/oss/configurator/rac/common/util/ValidateArgument::notNull → SURVIVED

因为 return 类型是 void 杀死这种突变的可能方法是什么?

猜测 这里:你有一个测试用null调用B的方法吗?

您会看到,当 B 为空时,验证方法很可能应该抛出异常。当您从不使用 null 测试该方法时,如果该行是否真的执行了,那没有什么区别!

ValidateArgument.notNull(B); 的目的是什么?

我们从您的测试中知道它在传递 null 时抛出 NullPointerException,这就是您关心的所有事情吗?

如果是这样,您应该删除那行代码,因为它没有用 - 当您调用 method1 时,您仍然会得到 NullPointerException。即您的测试指定的行为是相同的。

或者 ValidateArgument.notNull 做了其他对您重要的事情?也许它会生成一条您认为有用的异常消息?如果是这样,您需要编写一个测试来确认消息是否存在。

然而,许多程序员不会编写指定断言行为的测试(这样做是否有意义将取决于您正在工作的context/domain)。

Pitest 具有一项功能,可让您避免在通常不经过单元测试的关注点(另一个常见的问题是日志记录)中创建突变。

如果将 full.package.name.ValidateArgument 添加到 avoidCallsTo 配置参数中,将不再产生此突变。