为什么尽管似乎引起无限递归,但突变体在坑突变测试中生存?

问题描述 投票:0回答:0

及其相应的测试类:

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→幸存

  1. 取得计算器/计算器的0重新返回i机:: fibonacci→杀死
  2. 从突变报告中,我认为幸存的突变体将代码修改为:
  3. if (i == 0 || false) return i;
  4. 为此,当使用
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;
	

java unit-testing testing mutation-testing pitest
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.