突变杀伤
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 配置参数中,将不再产生此突变。
我卡在了 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 配置参数中,将不再产生此突变。