Ваш вариант использования является хорошим кандидатом для параметризованных тестов.
JUnit 5 действительно готов.Поэтому я рекомендую использовать его.
Общая идея модульных тестов заключается в определении сценариев: что у вас есть в качестве входных данных и что вы ожидаете.
В вашем вопросе вы успешно начали их определять.
НоХороший юнит-тест - это юнит-тест, который не оставляет дыр.Поэтому вам также необходимо идентифицировать и протестировать угловые случаи.
Вы можете, например, определить сценарии (не исчерпывающие, но дающие представление):
partition([1,2,3,4,],2) will return ([1,2],[3,4]) // nominal case
partition([1,2,3,4,],3) will return ([1,2,3],[4]) // nominal case
partition([1,2,3,4,],5) will return () // corner case
partition([],2) will return () // corner case
Теперь напишите для них тест:
import static java.util.Arrays.asList;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;
public class PartitionTest {
@ParameterizedTest
@MethodSource("partitionFixture")
void partition(List<Integer> originalList, int partitionSize, List<List<Integer>> expectedListOfList) {
ArrayList<ArrayList<Integer>> actualListOfList = new Partition().partition(originalList, partitionSize);
Assertions.assertEquals(expectedListOfList, actualListOfList);
}
@SuppressWarnings("unused")
private static Stream<Arguments> partitionFixture() {
return Stream.of(Arguments.of(asList(1, 2, 3, 4), 2, asList(asList(1, 2), asList(3, 4))),
Arguments.of(asList(1, 2, 3, 4), 3, asList(asList(1, 2, 3), asList(4))),
Arguments.of(asList(1, 2, 3, 4), 5, asList()),
Arguments.of(asList(), 2, asList()));
}
}