Java测试——junit的使用(2)

9 篇文章 0 订阅
本文介绍了如何使用JUnit的@Test注解指定测试用例的执行顺序,通过@Order和@TestMethodOrder实现固定顺序。还详细讲解了参数化测试,包括@ParameterizedTest,@ValueSource,@CsvSource以及@CsvFileSource的用法,以及如何动态生成数据源。最后提到了测试套件的概念,@Suite注解用于组合多个测试类执行。
摘要由CSDN通过智能技术生成

排序

我们同一个类下的多个用例的执行顺序是不确定的,如果需要指定固定的顺序,则需要在类上加这个注解

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)

然后在想要第一个执行的用例上加上

@Order(1)

第二个执行的用例上注解:

@Order(2)

以此类推

例如:没有order注解时:

import org.junit.jupiter.api.Test;

public class aaa {
    @Test
    void two(){
        System.out.println("aaa two");
    }
    @Test
    void one(){
        System.out.println("aaa one");
    }
    @Test
    void three(){
        System.out.println("aaa three");
    }
}

执行顺序是one two three
在这里插入图片描述
有了order注解:

import org.junit.jupiter.api.MethodOrderer;
import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestMethodOrder;

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class aaa {
    @Test
    @Order(1)
    void two(){
        System.out.println("aaa two");
    }

    @Test
    @Order(2)
    void one(){
        System.out.println("aaa one");
    }

    @Test
    @Order(3)
    void three(){
        System.out.println("aaa three");
    }
}

就会按照我们想要的顺序执行了
在这里插入图片描述
并且需要注意的是:我们的@Test注解还是需要加上的,否则会无法正确执行

参数化

我们可以自定义要进行测试的参数

单数据源

使用下面两个注解来进行单一参数设置

@ParameterizedTest
@ValueSource(数据类型类={参数1,参数2...})

其中数据类型类可以参照下面这个表

数组数据类型类
short[]shorts
byte[]bytes
int[]ints
long[]longs
double[]doubles
char[]chars
boolean[]booleans
String[]strings
Class<?>classes

例如:输出所有的string类型的参数

@ParameterizedTest
@ValueSource(strings = {"curry", "lebron", "durant"})
void ontParamTest(String name){
    System.out.println(name);
}

在这里插入图片描述

多数据源(直接传输数据)

使用下面两个注解来进行多参数设置

@ParameterizedTest
@CsvSource({"参数1数据1, 参数1数据2", "参数2数据1, 参数2数据2"...})

例如,输出string类型和int类型的参数

@ParameterizedTest
@CsvSource({"curry,30","lebron,23","durant,35"})
void multiParamsTest(String name, int id){
    System.out.println(name + "穿" + id + "号码");
}

在这里插入图片描述

多数据源(通过文件传输)

当我们的数据过多时,直接写在代码上显得十分冗余,因此我们可以写在表哥中,让代码从文件中读取数据

这里的文件是.csv文件

通过下面两个注解来使用:

@ParameterizedTest
@CsvFileSource(files = "文件路径")

例如:
先创建一个.csv文件
在这里插入图片描述
然后编写代码:

@ParameterizedTest
@CsvFileSource(files = "/Users/lixiao/Desktop/NameAndId.csv")
void csvFileParamsTest(String name, int id){
    System.out.println(name + "穿" + id + "号码");
}

在这里插入图片描述

动态方法生成数据源

我们可以动态的生成数据源
使用下面两个注解

@ParameterizedTest
@MethodSource("提供数据源方法名")

如果返回的数据类型统一,那么提供数据的方法最终直接返回具体的类型,并且需要是静态的
例如:

@ParameterizedTest
@MethodSource("ParamsSupport")
void DynamicParamsTest(String name){
    System.out.println(name);
}

static String[] ParamsSupport() throws InterruptedException {
    String[] arr = new String[5];
    for (int i = 0; i < arr.length; i++) {
        arr[i] = System.currentTimeMillis() + "";
        Thread.sleep(3);
    }
    return arr;
}

在这里插入图片描述

如果返回的数据类型不统一,提供数据的方法最终返回的是数据流,并且需要是静态的

static Stream<Arguments> 方法名

代码案例:

@ParameterizedTest
@MethodSource("ParamsSupport")
void DynamicParamsTest(String name, int id){
    System.out.println(name + "穿" + id + "号码");
}

static Stream<Arguments> ParamsSupport() throws InterruptedException {
    String[] arr = new String[5];
    for (int i = 0; i < arr.length; i++) {
        arr[i] = System.currentTimeMillis() + "";
        Thread.sleep(3);
    }
    return Stream.of(
            Arguments.arguments(arr[0], 20),
            Arguments.arguments(arr[1], 20),
            Arguments.arguments(arr[2], 20),
            Arguments.arguments(arr[3], 20),
            Arguments.arguments(arr[4], 20)
    );
}

在这里插入图片描述

@MethodSource中也可以不写方法名,提供数据的方法和使用数据的方法同名即可

并且,使用了参数化@ParameterizedTest注解的方法,不能再用@Test注解

测试套件

想要同时测试多个类,就需要使用测试套件,这些要执行的测试类必须有@Test注解
先创建一个类,使用下面这个注解标明该类是测试套件类

@Suite

指定类名

使用下面这个注解来指定要执行的类名

@SelectClasses({1.class,2.class ...})

例如:

@Suite
@SelectClasses({aaa.class, bbb.class})
public class runSuite {

}

在这里插入图片描述

指定包名

使用下面这个注解来指定要执行的类所在的包名

@SelectPackages("包名")

例如:

@Suite
@SelectPackages("autoTest0212")
public class runSuite {

}

我们包的结构如下:
在这里插入图片描述
但是调用该方法后,只运行了junitTest和cccTests
在这里插入图片描述
这是因为,使用指定包名来运行所有测试类,必须要该类命名以“Test”或者“Tests”为结尾,并且T必须为大写

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值