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

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

Сообщение Anonymous »

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

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

package calculator;

public class Calculator {

public int fibonacci(int i) {
if (i == 0 || i == 1) return i;
return fibonacci(i - 2) + fibonacci(i - 1);
}
}
< /code>
и его соответствующий тестовый класс: < /p>
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) ), в конечном итоге вызывая переполнение стека. Однако мутант помечается как выживший. < /P>
Я изменил модульный тест на: < /p>

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

@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»