及其相应的测试类:
package calculator;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
public class CalculatorTest {
private static Calculator calculator;
@BeforeClass
public static void init() {
calculator = new Calculator();
}
@Test
public void FibonacciTest() {
Assert.assertEquals(1, calculator.fibonacci(1));
}
}
为线:
if (i == 0 || i == 1) return i;
pit创建三个突变:
有条件的条件 - 替换为false→杀死的平等检查
有条件的条件 - 替换为false→幸存
if (i == 0 || false) return i;
1
作为参数运行测试时,该函数应输入无限递归(对于
fibonacci(1)
返回),最终导致堆栈溢出。但是,突变体被标记为幸存。I将单位测试修改为:
fibonacci(0) + fibonacci(-1)
对于此单位测试该线的所有突变体被杀死。当用
@Test
public void FibonacciTest() {
Assert.assertEquals(2, calculator.fibonacci(3));
}
作为论点进行测试时,突变体如何生存,但被1
杀死?坑的突变测试行为是否有一些解释的结果?
幸存的突变体很可能是因为您没有涵盖3
if (false || i == 1) return i;