Свободные утверждения
Прежде всего, используйте библиотеку FEST-Assertions , чтобы представить приятно выглядящие утверждения с осмысленными сообщениями об ошибках:
assertThat(method(arg1)).containsExactly(a, b, c);
assertThat(method(arg2)).containsExactly(a, b, c);
assertThat(method(arg3)).containsExactly(a, b, c);
Способ BDD
Но я понимаю, что ваш вопрос не о синтаксисе, а о методологии: что делать, если arg4
необходимо протестировать?Ну, если arg1
- arg4
имеют другое семантическое значение, я бы посоветовал вам провести отдельный тест для каждого аргумента. Очень подробный, но также чрезвычайно читаемый (псевдокод):
@Test
public void shouldReturnAbcWhenSomeArgumentUsed() {
//given
Object arg = arg1;
//when
Set<Object> result = method(arg);
//then
assertThat(result).containsExactly(a, b, c);
}
.. и повторять это для каждого теста.Ключевая часть: имя метода должно представлять значение аргумента, что этот метод на самом деле тестирует, что вы ожидаете, каков сценарий?
Рассмотрите возможность тестирования isEven
метода.Я бы порекомендовал следующие тесты:
shouldReturnTrueForZero
shouldReturnTrueForSmallPositiveEvenNumber
shouldReturnTrueForLargePositiveEvenNumber
shouldReturnFalseForSmallPositiveOddNumber
shouldReturnFalseForLargePositiveOddNumber
- ... и зеркально отразить тесты для отрицательных чисел
Каждый тест представляет немного отличающийся, хорошо определенный сценарий.С другой стороны, вы могли бы генерировать буквально тысячи shouldReturnFalseWhen227
, но какова ценность такого набора тестов, кроме его большого размера?Тестируйте семантически разные аргументы и угловые случаи, точно определяя, какой случай проверяется.
Параметризованный способ
Если вы действительно хотите использовать только один общий метод тестирования, Параметризованный бегун - это путь.Я думаю, что пример не требует пояснений.Примечание: вы также можете параметризовать ожидаемые значения.
@RunWith(value = Parameterized.class)
public class JunitTest6 {
private Object arg;
public JunitTest6(Object arg) {
this.arg = arg;
}
@Parameterized.Parameters
public static Collection<Object[]> data() {
return Arrays.asList(
new Object[][]{
{arg1},
{arg2},
{arg3}
});
}
@Test
public void testMethod() {
assertThat(method(arg)).containsExcatly(a, b, c);
}
}
На основе this .