如果待测试的输入和输出是一组数据:
可以把测试数据组织起来
用不同的测试数据调用相同的测试方法
参数化测试和普通测试稍微不同的地方在于,一个测试方法需要接收至少一个参数,然后,传入一组参数反复运行。
JUnit提供了一个@ParameterizedTest注解,用来进行参数化测试。
假设我们想对Math.abs()进行测试,先用一组正数进行测试:
@ParameterizedTest
@ValueSource(ints = { 0, 1, 5, 100 })
void testAbs(int x) {
assertEquals(x, Math.abs(x));
}
再用一组负数进行测试:
@ParameterizedTest
@ValueSource(ints = { -1, -5, -100 })
void testAbsNegative(int x) {
assertEquals(-x, Math.abs(x));
}
注意到参数化测试的注解是@ParameterizedTest,而不是普通的@Test。
实际的测试场景往往没有这么简单。假设我们自己编写了一个StringUtils.capitalize()方法,它会把字符串的第一个字母变为大写,后续字母变为小写:
public class StringUtils {
public static String capitalize(String s) {
if (s.leng