JIANGzihao0222

导航

 

声明参数化

导入注解

<!--        junit5新的编程和扩展模型-->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter</artifactId>
            <version>5.8.2</version>
            <scope>test</scope>
        </dependency>
<!--Junit5参数化依赖-->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-params</artifactId>
            <version>5.8.1</version>
            <scope>test</scope>
        </dependency>

1、一个参数

  1. 将@test注解改为@ParameterizedTest,声明是一个参数化测试类,注:test 和parameterizedTest不可以一起用
  • 传递参数数据,使用@ValueSourse注解定义关键字进行类型声明
  • 测试方法前加入形参,接收参数化数据
// 场景一个参数的情况很少
public class ValueSourceDemoTest {

    // 1、将@Test竹节换为@ParameterizedTest,不可以结合使用
    // 声明测试类是一个参数化测试类
    // 2、传递参数数据
    // 使用单参数注解@ValueSource定义关键字进行类型声明
    @ValueSource(strings = {"张三","李四","王五"})
    // 3、在测试方法上加入形参,接收参数化数据
    @ParameterizedTest
    void valueSourceDemo(String name){
        System.out.println(name);
        assertEquals(name.length(),2);
    }
}

2、多个参数

第一种形式

public class CscSourceDemoTest {

    // 1、声明一个参数化的测试类
    @ParameterizedTest
    // 2、使用CsvSource进行传递参数化数据,传递的参数的格式是一个集合
    // 如果是多个参数,默认分割符 ","
    @CsvSource({"哈利,12", "赫敏,13", "罗恩,14"})
    void csvSourceDemo(String name,int age){
        System.out.println(name + "的年龄是" + age);
    }

    @ParameterizedTest
    // 使用delimiterString = "-"修改默认参数符
    @CsvSource(value = {"哈利-12", "赫敏-13", "罗恩-14"},delimiterString = "-")
    void csvSourceDemo2(String name,int age){
        System.out.println(name + "的年龄是" + age);
    }

//    也可以进行单参数
//    @CsvSource({"哈利", "赫敏", "罗恩"})
//    void csvSourceDemo(String name){
//        System.out.println(name);
//    }
}

第二种形式

  • 使用@paramterizedTest进行声明参数化测试
  • 使用MethodSource("stringProvider") 指定提供数据源的方法名
  • 定义一个静态方法,提供参数化数据源
  • 填加形参,要与静态方法中定义的元素类型一致
  • @MethodSource不提供方法名采用默认方法名一致的静态数据提供方法
public class MethodSourceTestDemo {

    // 1.声明参数化
    @ParameterizedTest
    // 2.通过MethodSource("") 指定数据源的方法名
    @MethodSource("stringProvider")
    // 4.添加形参,要和静态方法中定义的元素类型一致
    void methodSourceDemo(String name){
        System.out.println(name);
    }
    // 3.定义一个静态方法,提供参数化数据源
    static Stream<String> stringProvider(){
        return Stream.of("张三","李四");
    }

    // 1.声明参数化
    @ParameterizedTest
    // 2.采用MethodSource,默认指定与方法命名的静态数据源
    @MethodSource
    // 4.添加形参,要和静态方法中定义的元素类型一致
    void methodSourceDemo1(String name){
        System.out.println(name);
    }
    // 3.定义一个静态方法,提供参数化数据源
    static Stream<String> methodSourceDemo1(){
        return Stream.of("张三","李四");
    }
}

传入多个对象参数

// 多参数
public class MulitiMethodSourceDemoTest {
    // 1
    @ParameterizedTest
    // 2
    @MethodSource("objectProvider")
    // 4
    void multiMethodSourceDemo(String name,Integer age){
        System.out.println(name + "的年龄是" + age);
    }

    // 3
    static Stream<Arguments> objectProvider(){
        return Stream.of(
                Arguments.arguments("哈利",5),
                Arguments.arguments("赫敏",6)
        );
    }
}

3、以文件作为参数

public class CsvFileSourceDemoTest{

    // 声明参数化数据
    // @CsvFileSource 声明关键字
    // 文件前要加"/"

    @ParameterizedTest
    @CsvFileSource(resources = "/data.csv")
    void csvFileSourceDemo1(String name,int age){
        System.out.println(name + "的年龄是" + age);
    }

    @ParameterizedTest
  // 进行规定分割符 @CsvFileSource(resources
= "/data2.csv",delimiterString = "|") void csvFileSourceDemo2(String name,int age){ System.out.println(name + "的年龄是" + age); } }

4、传入空参

public class EmptySourceDemoTest {
// 1、声明是一个参数化
@ParameterizedTest
// 2、使用EmptySource注解
@EmptySource
void nullSourceDemo(String param){
System.out.println(param);
}
}

5、传入null

public class NullSourceDemoTest {

    // 1、声明是一个参数化
    @ParameterizedTest
    // 2、使用NullSource注解
    @NullSource
    void nullSourceDemo(String param){
        System.out.println(param);
    }
}

6、null和empty都以作为参数进行传入

public class NullandEmptySourceDemoTest {
    // 1、声明是一个参数化
    @ParameterizedTest
    // 2、使用NullAndEmptySource注解
    @NullAndEmptySource
    void nullSourceDemo(String param){
        System.out.println(param);
    }
}

二、进行限制时间

public class TimeoutExampleTest {

    @Test
    //设定用例执行的超过时间,一旦超过x秒,则用例失败
    @Timeout(7)
    // 不仅适用于Test,还适应于BeforeEach,AfterEach
    // 也可以设置时间粒度
    void timeoutCaseOne() throws InterruptedException {
        System.out.println("第一条用例");
        sleep(10000);
    }

    // 配置时间单位
    @Test
    @Timeout(value = 3,unit = MILLISECONDS) // 时间粒度是毫秒 Second,Minute
    void timeoutCaseTwo(){
        System.out.println("第二条用例");
    }
}

三、显示名称

@DisplayName("霍格沃兹测试")
public class DisplayNameExampleTest {
    @Test
    // 定义一个显示名称
    @DisplayName("霍格沃兹第一条测试")
    void hogwartsOne(){
        System.out.println("第一条用例");
    }

}

 

posted on 2024-05-09 11:35  实名吓我一跳  阅读(29)  评论(0编辑  收藏  举报