2 回答
TA贡献1864条经验 获得超2个赞
您的用例似乎是参数化测试的一个很好的候选者。
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()));
}
}
添加回答
举报