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

单元测试--Junit

Junit是Java的单元测试框架提供了一些注解方便我们进行单元测试

1. 常用注解

常用注解:

  • @Test
  • @BeforeAll,@AfterAll
  • @BeforeEach,@AfterEach

使用这些注解需要先引入依赖:

<dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-api</artifactId><version>5.9.1</version><scope>test</scope>
</dependency>

1.1 @Test

@Test用于方法,表示该方法是一个测试方法

添加上@Test注解可以看到左边出现了绿色三角形,点击可运行对应方法,点击类名左边的则是运行类中的所有测试方法。

1.2  @BeforeAll @AfterAll

@BeforeAll注释的方法会在该类中的所有测试方法执行前执行;

@AfterAll注释的方法会在该类中所有测试方法执行后执行; 

被这两个注解注释的方法只能声明为静态方法

public class JunitTest {@Testvoid test01() {System.out.println("test01");}@Testvoid test02() {System.out.println("test02");}@BeforeAllstatic void beforeAll() {System.out.println("BeforeAll");}@AfterAllstatic void afterAll() {System.out.println("AfterAll");}
}

1.3  @BeforeEach  @AfterEach

@BeforeEach注释的方法会在该类中的每个测试方法执行前都执行一次;

@AfterEach注释的方法会在该类中每个测试方法执行后都执行一次; 

public class JunitTest {@Testvoid test01() {System.out.println("test01");}@Testvoid test02() {System.out.println("test02");}@BeforeAllstatic void beforeAll() {System.out.println("BeforeAll");}@AfterAllstatic void afterAll() {System.out.println("AfterAll");}@BeforeEachvoid beforeEach() {System.out.println("BeforeEach");}@AfterEachvoid afterEach() {System.out.println("AfterEach");}
}

2. 指定测试用例执行顺序

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class JunitTest {@Order(2)@Testvoid test01() {System.out.println("test01");}@Order(1)@Testvoid test02() {System.out.println("test02");}
}

 

3. 参数化 

我们不能直接给测试方法添加参数,需要通过注册的方式。

引入依赖:

<dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-params</artifactId><version>5.9.1</version><scope>test</scope>
</dependency>

3.1 单参数

    //单参数@ParameterizedTest@ValueSource(ints = {1, 2, 3, 4})void test03(int x) {System.out.println("test03, x = " + x);}

@ParameterizedTest 注解用于表示方法为一个参数测试方法,允许运行同一个测试方法多次,但使用不同的参数值来执行测试

@ValueSource用于为@ParameterizedTest 提供单一类型的参数值。

3.2 多参数

    //多参数@ParameterizedTest@CsvSource({"'小明', '18'", "'小红', '19'", "'小华', '20'"})void test04(String name, int age) {System.out.println(name + "今年" + age + "岁");}

    //多参数,文件传递@ParameterizedTest@CsvFileSource(resources = "test05.csv")void test05(String name, int age) {System.out.println(name + "今年" + age + "岁");}

 

3.3 通过方法生成参数

    @ParameterizedTest@MethodSource("generate")void test06(String name, int age) {System.out.println(name + "今年" + age + "岁");}public static Stream<Arguments> generate() {return Stream.of(Arguments.arguments("A", 12),Arguments.arguments("B", 13),Arguments.arguments("C", 14),Arguments.arguments("D", 15));}

arguments()方法接受的是一个可变参数,可以接收任意数量的参数

4. 测试套件

实际开发中会有多个类需要我们测试,所以我们也需要管理多个测试类的运行。

引入依赖:

        <dependency><groupId>org.junit.platform</groupId><artifactId>junit-platform-suite</artifactId><version>1.9.1</version><scope>test</scope></dependency><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-engine</artifactId><version>5.9.1</version><scope>test</scope></dependency>

 

import org.junit.platform.suite.api.SelectClasses;
import org.junit.platform.suite.api.Suite;@Suite
@SelectClasses({JunitTest.class, JunitTest2.class})
public class RunTest {
}

创建一个类使用入上注解

@SelectClasses表示通过class运行测试用例,这里先运行JunitTest再运行JunitTest2

也可以使用包运行:

@Suite
//@SelectClasses({example.JunitTest.class, example.JunitTest2.class})
@SelectPackages(value = {"example"})
public class RunTest {
}

注意RunTest类不能在这个包中

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 煤矿运输卡车4G/5G视频监控管理系统的应用与优势
  • 人工智能与机器学习原理精解【8】
  • Springboot:自定义过滤器
  • Java整理12
  • 独孤思维:减肥就跟赚钱一样痛苦
  • STM32自定义协议串口接收解析指令程序
  • Python爬虫技术 第08节 Cookies和Session
  • Linux用户和权限
  • 《Techporters架构搭建》-Day03 功能权限设计
  • 【Ubuntu】Ubuntu 配置镜像源(ARM)
  • Mojo编程语言
  • DATEDIFF()- Date Functions-SQL函数
  • Spring Boot 注解 @PostConstruct 介绍
  • 二百四十五、海豚调度器——用DolphinScheduler调度执行复杂的HiveSQL(HQL包含多种海豚无法正确识别的符号)
  • Python药物副作用生物图分析算法和矩阵降维算法
  • __proto__ 和 prototype的关系
  • 【5+】跨webview多页面 触发事件(二)
  • 【mysql】环境安装、服务启动、密码设置
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • 2019年如何成为全栈工程师?
  • Android单元测试 - 几个重要问题
  • CSS相对定位
  • Java反射-动态类加载和重新加载
  • Python学习之路16-使用API
  • vue中实现单选
  • WebSocket使用
  • 从伪并行的 Python 多线程说起
  • 讲清楚之javascript作用域
  • 快速构建spring-cloud+sleuth+rabbit+ zipkin+es+kibana+grafana日志跟踪平台
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • 双管齐下,VMware的容器新战略
  • 算法---两个栈实现一个队列
  • 为物联网而生:高性能时间序列数据库HiTSDB商业化首发!
  • ​软考-高级-信息系统项目管理师教程 第四版【第14章-项目沟通管理-思维导图】​
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #Datawhale AI夏令营第4期#AIGC文生图方向复盘
  • #NOIP 2014# day.2 T2 寻找道路
  • (20)目标检测算法之YOLOv5计算预选框、详解anchor计算
  • (delphi11最新学习资料) Object Pascal 学习笔记---第14章泛型第2节(泛型类的类构造函数)
  • (zhuan) 一些RL的文献(及笔记)
  • (zt)最盛行的警世狂言(爆笑)
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (三)docker:Dockerfile构建容器运行jar包
  • (四)activit5.23.0修复跟踪高亮显示BUG
  • (一)Neo4j下载安装以及初次使用
  • (转)大型网站的系统架构
  • .NET Core中如何集成RabbitMQ
  • .net 按比例显示图片的缩略图
  • .NET 某和OA办公系统全局绕过漏洞分析
  • .NET/C# 使窗口永不获得焦点
  • .net2005怎么读string形的xml,不是xml文件。
  • .NET编程——利用C#调用海康机器人工业相机SDK实现回调取图与软触发取图【含免费源码】