Почему мутант выживает при тестировании мутаций PIT, несмотря на то, что, казалось бы, вызывает бесконечную рекурсию?JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Почему мутант выживает при тестировании мутаций PIT, несмотря на то, что, казалось бы, вызывает бесконечную рекурсию?

Сообщение Anonymous »

Я провожу тестирование на мутации, используя яму в проекте Java и сталкивался с случаем, когда мутант выживает, даже если он должен вызвать ошибку переполнения стека. Тестирование: < /p>

Код: Выделить всё

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;
Учитывая это, при запуске теста с 1 в качестве аргумента функция должна ввести бесконечную рекурсию (для fibonacci(1) она возвращает fibonacci(0 ) + fibonacci(-1)), что в конечном итоге приводит к переполнению стека. Однако мутант помечен как ВЫЖИВШИЙ.
Я изменил модульный тест так:

Код: Выделить всё

@Test
public void FibonacciTest() {
Assert.assertEquals(2, calculator.fibonacci(3));
}
И для этого модульного теста все мутанты этой линии убиты.
Почему мутант выживает при тестировании с 1 аргумент, но его убивают с помощью 3? Есть ли что-то в поведении PIT при тестировании мутаций, что объясняет такой результат?

Подробнее здесь: https://stackoverflow.com/questions/793 ... using-infi
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»