Код: Выделить всё
package calculator;
public class Calculator {
public int fibonacci(int i) {
if (i == 0 || i == 1) return i;
return fibonacci(i - 2) + fibonacci(i - 1);
}
}
Код: Выделить всё
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));
}
}
< /code>
для строки: < /p>
if (i == 0 || i == 1) return i;
< /code>
Pit создает три мутации: < /p>
[*] Удаленная условная - заменить проверку равенства с помощью false → убийство < /li>
[b] Удаленное условное - замененная проверка равенства с помощью false → выжил [/b]
Заменяемый int return на 0 для калькулятора/калькулятора :: fibonacci → убит
< /ol>
Из отчета о мутации я предполагаю, что выживший мутант изменяет код как: < /p>
if (i == 0 || false) return i;
Я изменил модульный тест так:
Код: Выделить всё
@Test
public void FibonacciTest() {
Assert.assertEquals(2, calculator.fibonacci(3));
}
Почему мутант выживает при тестировании с 1 аргумент, но его убивают с помощью 3? Есть ли что-то в поведении PIT при тестировании мутаций, что объясняет такой результат?
Подробнее здесь: https://stackoverflow.com/questions/793 ... using-infi