пит-мутация - if (x! = null) возвращает ноль, иначе выдает новое RuntimeException - PullRequest
1 голос
/ 11 марта 2019

У меня есть метод, который возвращает пользовательский объект

public MyObject getTheObject(){
  ...
  return muObject;
}

его модульный тест проверяет, что объект, возвращаемый методом getTheObject(), не равен нулю

@Test
public void testGetTheObject(){
  ...
  assertNotNull(actualObject);
}

и тесты пройдены.

При запуске теста мутации с Pitest он показывает одну SURVIVED мутацию, которая говорит что-то вроде этого:

mutated returned of Object for value for ..../getTheObject to ( if ( x!= null ) null else throw new RuntimeException )

Вопрос в том, как должен выглядеть наш модульный тест, чтобы избавиться от этой проблемы, и KILL этой мутации

1 Ответ

1 голос
/ 06 июня 2019

Это "мутирователь возвращаемого значения" PIT (когда тип возвращаемого значения - Object), и он собирается заменить ненулевые возвращаемые значения на null и выдать исключение java.lang.RuntimeException, если не измененный метод возвратит null.

то есть измененный код:

public MyObject getTheObject(){ ... return null; }

Теперь, что, если этот метод возвращает значение null и сверх того, что вы пытаетесь получить доступ к любому методу MyObject.В этом случае вы получите исключение нулевого указателя (исключение времени выполнения), и этот вариант использования не будет покрыт проверкой assertNotNull().

Таким образом, чтобы убить этот мутатор, мы можем проверить значение любого свойства.

Ответ:

assertThat(mutationTestService.getClassAObj(10).getA(),is(10));

Где getA() - получатель ClassA{int a}, и я пытаюсь проверить, получаю ли ято же значение, которое я передал конструктору для инициализации.

...