【发布时间】:2019-08-01 22:06:30
【问题描述】:
我有一个返回自定义对象的方法
public MyObject getTheObject(){
...
return muObject;
}
它的单元测试检查getTheObject()方法返回的对象不为空
@Test
public void testGetTheObject(){
...
assertNotNull(actualObject);
}
测试通过。
当运行突变测试with Pitest 时,它会显示一个SURVIVED 突变,它会这样说:
mutated returned of Object for value for ..../getTheObject to ( if ( x!= null ) null else throw new RuntimeException )
问题是我们的单元测试应该是什么样子才能摆脱这个问题,以及KILL那个突变
【问题讨论】:
-
我不知道
SURVIVED和KILL在这种情况下是什么意思。请向我们展示产生您所询问的输出的代码。我们无法仅从一些随机错误消息中猜测发生了什么。 -
在这种情况下
x是什么? -
坑文档中所说的 x 是我在 getTheObject() 方法中返回的对象。 SURVIVED 表示如果pit 改变(更改)我的代码中的某些内容,我的单元测试仍然通过,KILL 表示pit 突变无法让我的单元测试通过。
-
要回答你的问题,我们需要知道哪个突变体没有杀死它的突变体之一。在这样的行之后查看 maven 日志:
> org.pitest.mutationtest.engine.gregor.mutators.ReturnValsMutator >> Generated 2 Killed 1 (50%) > KILLED 1 SURVIVED 0 TIMED_OUT 0 NON_VIABLE 0 > MEMORY_ERROR 0 NOT_STARTED 0 STARTED 0 RUN_ERROR 0 > NO_COVERAGE 1 -
你可以提供整个例子吗?
标签: java unit-testing mutation-testing pitest