如何进行参数化测试
- 参数化测试
- @ValueSource
- @MethodSource
- @CSVSource
- @CsvFileSource
- 适用场景
参数化测试
参数化测试使 使用不同参数 多次运行测试成为可能,不是使用注解@Test,而是使用注解@ParameterizedTest。
当执行参数化测试的时候,还需要定义一个参数源,用来为测试方法提供参数值。Junit5提供如下的注解方式来定义数据源:
注解 | 作用 |
@ValueSource | 数据源-该源将依次为每次调用提供参数 |
@MethodSource | 数据来源于方法的返回值 |
@CSVSource | 使用CSV形式给参数化方法提供参数,把参数在代码中硬编码 |
@CsvFileSource | CSV文件来为参数化测试提供参数 |
@ValueSource
public class ParamsTest {
@ParameterizedTest
@ValueSource(strings = {"", "zwf"})
public void testWithValueSource2(String param){
Out.out(param);
}
@ParameterizedTest
@ValueSource(ints = {1, 2, 3})
public void testWithValueSource(int param){
assertTrue(param >0 && param < 8);
Out.out(param);
}
}运行结果:

- @ValueSource 支持多种数据类型,代码演示了int和string类型
- 依次为每次调用提供参数
@MethodSource

- @MethodSource() 若没有提供方法名,如上图标注1的内容,则默认的寻找和测试用例方法同名并且没有参数的方法提供数据源。
- @MethodSource() 若有提供方法名,如上图标注2的内容,则直接找对应的方法即可。
@CSVSource
@CsvFileSource
@ParameterizedTest
@DisplayName("csvsouce")
@CsvSource(
{ "wyc,zwf" , "csdn,csdn" }
)
public void testWithCsvSource(String expect ,String acture){
assertEquals(expect,acture);
}
@ParameterizedTest
@DisplayName("csvfile")
@CsvFileSource(resources = "/name.csv",numLinesToSkip = 1)
public void testWithCsvFile(String expect ,String acture){
assertEquals(expect,acture);
}
- 在resources根目录创建name.csv文件,numLinesToSkip = 1 因为文件第一行为列名,设置数据源跳过第一行
适用场景
四种提供数据源的方式各有千秋,在平时的工作中可以自行选择,没有哪个最好,只要有最适合。
注解 | 作用 | 适应场景 |
@ValueSource | 数据源-该源将依次为每次调用提供参数 | 简单类型参数 |
@MethodSource | 数据来源于方法的返回值 | 涉及到完整对象等复杂的数据源 |
@CSVSource | 使用CSV形式给参数化方法提供参数,把参数在代码中硬编码 | 简单结构化 |
@CsvFileSource | CSV文件来为参数化测试提供参数 | 复杂的结构化数据 |
















