#java #junit #code-coverage #mutation
#java #junit #покрытие кода #мутация
Вопрос:
У меня есть простой метод, который проверяет, находится ли вычисленная разница в пределах диапазона. Он показывает 5 мутаций для возвращаемого значения. Что бы я ни пытался, я не могу уничтожить эти мутации. Ниже приведен метод и тестовый пример.
public boolean isInRange(Float value1, Float value2) {
int upperBound = acceptableDifference;
int lowerBound = -acceptableDifference;
Float difference = value1 - value2;
return difference >= lowerBound amp;amp; difference <= upperBound;
}
////////TEST CASE
assertEquals(true, classUnderTest.isInRange(20.0F, 30.0F));
assertEquals(false, classUnderTest.isInRange(20.0F, 45.0F));
Как вы уничтожаете такие мутации, как эта?
Отчет о PIT:
96 public boolean isInRange(Long value1, Long value2) {
97 int upperBound = acceptableDifference;
98 1 int lowerBound = -acceptableDifference; //<== One mutation
99 1 Long difference = value1 - value2; //<== One mutation
100 5 return difference >= lowerBound amp;amp; difference <= upperBound; //<== Five Mutations
Комментарии:
1. Можете ли вы объяснить, каков правильный код и какую мутацию вы делаете?
2. Конечно. Итак, самая большая мутация, которую я хочу устранить, — это оператор return (только для этой строки их 5). Я попытался указать значения, которые заставляют этот метод возвращать как true, так и false, а затем использовал assertEquals() для проверки правильности возврата true или false. Однако мутации не уничтожаются. Как вы можете видеть в отчете PIT, строка 100 содержит 5 мутаций. (это удаляет условные границы).
3. Чтобы устранить эту мутацию, вам нужно запустить тест, который проверит границы. Как вы устанавливаете acceptableDifference?
4. И если вы выполните мутацию и удалите границы, тест должен завершиться неудачей. Так ли это?
5. понял. Мне пришлось также учитывать как отрицательные, так и положительные значения в тестировании. глупый недосмотр. Спасибо.s