当前位置: 首页 > news >正文

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

排序

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

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)

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

@Order(1)

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

@Order(2)

以此类推

例如:没有order注解时:

import org.junit.jupiter.api.Test;public class aaa {@Testvoid two(){System.out.println("aaa two");}@Testvoid one(){System.out.println("aaa one");}@Testvoid 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必须为大写

http://www.lryc.cn/news/4666.html

相关文章:

  • 数据库(六): MySQL的主从复制和读写分离
  • 编程思想-0x00架构
  • QCon演讲实录(上):多云环境下应用管理与交付实践
  • async thunk 解决 API 调用的依赖问题
  • java 黑马头条 day3 实名认证分布式事务问题 seata
  • 测试开发之Django实战示例 第七章 创建电商网站
  • 【C++之容器篇】造轮子:list的模拟实现与使用
  • 自动驾驶:决策规划算法岗位面经分享
  • 2.7、进程调度的时机、切换与过程、方式
  • 工程管理系统源码+项目说明+功能描述+前后端分离 + 二次开发
  • ESP32S3系列--SPI从机驱动详解(一)
  • 【实战篇】移动端H5网页在ios滑动不流畅和禁止缩放问题
  • 12 循环神经网络(基础篇) Basic RNN
  • 【C语言必经之路——第11节】初阶指针(2)
  • SpringBoot学习(1)第一个SpringBoot程序
  • 什么是热迁移?90%的企业都理解错误
  • Scratch少儿编程案例-丝滑版贪吃蛇
  • Linux系统之网卡子接口配置方法
  • 2023上半年软考中级系统集成项目管理工程师2月25日开班
  • YOLO-V5轻松上手
  • CSS的优先级理解
  • 前端工程师leetcode算法面试必备-二分搜索算法(中)
  • 【数据库】MySQL 单表查询,多表查询
  • 【c++】vector实现(源码剖析+手画图解)
  • VScode查看python f.write()的文件乱码
  • excel应用技巧:如何用函数制作简易抽奖动图
  • CSI Tool 安装及配置记录
  • 华为OD机试 - 最低位排序(Python)| 真题+思路+代码
  • C#开发的OpenRA使用TrimExcess方法
  • ImageMagick任意文件读取漏洞(CVE-2022-44268)