当前位置: 首页 > 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类不能在这个包中

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

相关文章:

  • 达梦数据库系列—30. DTS迁移Mysql到DM
  • 随记0000——从0、1 到 C语言
  • C++ | Leetcode C++题解之第264题丑数II
  • 前端系列-8 集中式状态管理工具pinia
  • pytest使用
  • 单表查询总结与多表查询概述
  • redis的使用场景和持久化方式
  • 嵌入式Linux学习: 设备树实验
  • eqmx上读取数据处理以后添加到数据库中
  • 【中项】系统集成项目管理工程师-第5章 软件工程-5.3软件设计
  • C++学习笔记-内联函数使用和含义
  • 数据库(MySQL)-视图、存储过程、触发器
  • js 优雅的实现模板方法设计模式
  • C语言——输入输出
  • 【微软蓝屏】微软Windows蓝屏问题汇总与应对解决策略
  • OpenCV图像滤波(2)均值平滑处理函数blur()的使用
  • Android lmkd机制详解
  • linux shell(中)
  • VMware三种网络模式---巨细
  • 力扣高频SQL 50 题(基础版)第一题
  • 2.1.卷积层
  • 网易《永劫无间》手游上线,掀起游戏界狂潮
  • RNN(一)——循环神经网络的实现
  • php 根据位置的经纬度计算距离
  • 17 Python常用内置函数——基本输入输出
  • 【Web】LitCTF 2024 题解(全)
  • 家政项目小程序的设计
  • electron TodoList网页应用打包成linux deb、AppImage应用
  • 【C语言】 使用fgets和fputs完成两个文件的拷贝
  • 使用PyTorch导出JIT模型:C++ API与libtorch实战