如何进行参数化测试

  • 参数化测试
  • @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);
    } 
}

运行结果:

junit5使用 android junit5 parameterizedtest_python

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

@MethodSource

junit5使用 android junit5 parameterizedtest_参数化_02

  • @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);
    }

junit5使用 android junit5 parameterizedtest_单元测试_03

  • 在resources根目录创建name.csv文件,numLinesToSkip = 1 因为文件第一行为列名,设置数据源跳过第一行

适用场景

四种提供数据源的方式各有千秋,在平时的工作中可以自行选择,没有哪个最好,只要有最适合。

注解

作用

适应场景

@ValueSource

数据源-该源将依次为每次调用提供参数

简单类型参数

@MethodSource

数据来源于方法的返回值

涉及到完整对象等复杂的数据源

@CSVSource

使用CSV形式给参数化方法提供参数,把参数在代码中硬编码

简单结构化

@CsvFileSource

CSV文件来为参数化测试提供参数

复杂的结构化数据