Junit5-参数化:

maven3.8+java15+idea2022.2

  • 一周掌握Junit5

学习内容:

实现参数化需要将下面的依赖引入到pom.xml

 <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter-params</artifactId>
      <version>5.8.1</version>
      <scope>test</scope>
    </dependency>
  1. 使用注解ParameterizedTest
    使用@ParameterizedTest注解来代替@Test注解,单参数化注解使用@ValueSource ,多参数注解 @CsvSource,如果这两个注解@ParameterizedTest@Test同时使用则会多执行一次
单参数:
    @ParameterizedTest
    @ValueSource(strings={"张三","小明","小红"})//几个参数,就执行几次
    void testParamString(String name){
        System.out.println(name);
    }
    @ParameterizedTest
    @ValueSource(ints = {10,20,30})
    void testParamInt(int num){
        assertTrue(num < 100);
        System.out.println(num);
    }

多参数时,默认参数之间用英文逗号隔开

多参数:
@ParameterizedTest
    @CsvSource({"小明,10,一班"})
    void MultParams(String name,int age,String className ){
        System.out.println("name:"+name+" age:"+age+" classname:"+className);
    }
    //注:CsvSource也支持单参数
  1. 多参数时,指定参数分隔符
    //指定分隔符“-”
    @ParameterizedTest
    //下面2个参数,第一个参数为“小明,三年级”,第二个参数"18"
    @CsvSource(value = {"小明,三年级-18"},delimiterString = "-")//delimiterString指定分隔符
    void SplitParam(String name,int age){
        System.out.println("name:" + name+" age:"+age);
    }
    //能解决,参数中需要包含英文逗号的问题
  1. 参数文件
    参数可以从指定csv文件中读取,在resources目录下创建csv文件,参数之间用相同分隔符分割,例如 “,”,"|"等。
    此时使用的注解为 @CsvFileSource
    @ParameterizedTest
    @CsvFileSource(resources = "/data.csv")
    void ParamByFile(String name, Integer age) {
        System.out.println("name:" + name + " age:" + age);
    }
    //参数使用|分隔
    @ParameterizedTest
    @CsvFileSource(resources = "/data2.csv",delimiterString = "|")
    void ParamByFile2(String name, int age) {
        System.out.println("name:" + name + " age:" + age);
    }
  1. 动态参数
    上面介绍的方法都是参数方法,都有一个特点,就是参数是静态写死的,有时候,程序的参数需要需要动态创建,也就是执行某些方法,生成测试中需要的参数,并传入测试方法中,这就用到了@MethodSource,该注解主要是引入动态数据源方法,来获取参数,动态数据源方法一定是个静态方法,对应关系如图:在这里插入图片描述
    这里记录一下具体的使用:
    (1)需要一个参数的用例,下面方法只需要传入一个String型参数,动态数据源方法需要返回一个内部是String型参数的结构
    在这里插入图片描述
    (2)需要传多个参数
    这里就需要使用Arguments类型来表示返回多个类型参数,Argument是一个接口类,能返回多个Object类型的参数,使用如下如所示在这里插入图片描述
    (3)如果@MethodSource注解不填值,将默认引用与测试方法同名的静态方法作为动态参数源
    在这里插入图片描述

更多推荐