Как утверждать, что несколько переменных имеют одинаковое значение?
Я пишу тест JUnit для функции расчета
double calculate(double val1, double val2);
Ожидается, что функция выдаст тот же результат, если входные данные "перевернуты", то есть не должно иметь значения, какой из них стоит первым, и не должно иметь значения, отрицательные они или положительные (при условии, что они имеют одинаковые знаки).
Следующее должно дать одинаковый результат:
calculate(1.5, 4.7);
calculate(4.7, 1.5);
calculate(-1.5, -4.7);
calculate(-4.7, -1.5);
но у этого есть недостаток завершения метода теста, когда один из них терпит неудачу.
Мой текущий тест просто делает 4 отдельных утверждения:
assertEquals( 9.472, result1, 0.001 );
assertEquals( 9.472, result2, 0.001 );
assertEquals( 9.472, result3, 0.001 );
assertEquals( 9.472, result4, 0.001 );
но у этого есть недостаток завершения метода теста, когда один из них терпит неудачу. То же самое касается тестирования с использованием массива:
assertArrayEquals(
new double[]{9.472, 9.472, 9.472, 9.472},
new double[]{result1, result2, result3, result4},
0.001);
Другой вариант, который я придумал, состоял в том, чтобы просто утверждать, что они все равны, используя
assertTrue( result1 == result2 && result2 == result3 && result3 == result4 );
но у этого есть недостаток - не сообщать вам фактические значения, когда он терпит неудачу.
Как лучше всего протестировать что-то подобное?
1 ответ
Это похоже на то, для чего предназначены параметризованные тесты.
Ваш метод теста будет просто
@Test
public void testCommutativity() {
assertEquals(calculate(a, b), calculate(b, a), .001);
}
И ваш метод параметров будет что-то вроде
@Parameters
public static Collection<Object[]> data() {
return Arrays.asList(new Object[][] {
{ 1.5, 4.7 }, { -1.5, -4.7 }
});
}
Вы даже можете программно изменить ваши параметры (сделать один или оба отрицательных) перед их возвратом.