软件测试教程 自动化测试之Junit框架

文章目录

  • [1. 什么是 Junit ?](#1. 什么是 Junit ?)
  • [2. 常见的注解](#2. 常见的注解)
    • [2.1 @Test](#2.1 @Test)
    • [2.2 @BeforeAll,@AfterAll](#2.2 @BeforeAll,@AfterAll)
    • [2.3 @BeforeEach,@AfterEach](#2.3 @BeforeEach,@AfterEach)
  • [3. 测试用例顺序指定](#3. 测试用例顺序指定)
  • [4. 参数化](#4. 参数化)
    • [4.1 单个参数](#4.1 单个参数)
    • [4.2 多个参数](#4.2 多个参数)
    • [4.3 通过方法生成](#4.3 通过方法生成)
  • [5. 测试套件](#5. 测试套件)
  • [6. 断言](#6. 断言)
    • [6.1 断言相等](#6.1 断言相等)
    • [6.2 断言不相等](#6.2 断言不相等)
    • [6.3 断言为空](#6.3 断言为空)
    • [6.4 断言不为空](#6.4 断言不为空)

1. 什么是 Junit ?

Junit 是 Java 的单元测试框架


在 Java 项目中加入 Junit 依赖

java 复制代码
		<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api -->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>5.9.1</version>
        </dependency>
        
        <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-params -->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-params</artifactId>
            <version>5.9.1</version>
        </dependency>
        
        <!-- https://mvnrepository.com/artifact/org.junit.platform/junit-platform-suite -->
        <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-suite</artifactId>
            <version>1.9.1</version>
        </dependency>
        
        <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-engine -->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>5.9.1</version>
            <scope>test</scope>
        </dependency>

2. 常见的注解

2.1 @Test

  • @Test:表名当前的方法是一个测试用例
java 复制代码
import org.junit.jupiter.api.Test;

public class JunitTest {
    @Test
    void Test01() {
        System.out.println("========这是第一个测试用例=======");
    }

    @Test
    void Test02() {
        System.out.println("========这是第二个测试用例=======");
    }
}

2.2 @BeforeAll,@AfterAll

  • @BeforeAll:当前 class 中所有测试用例执行之前自动执行
  • @AfterAll:当前 class 中所有测试用例执行结束之后自动执行
java 复制代码
	@BeforeAll
    static void Start() {
        System.out.println("开始测试");
    }
    @AfterAll
    static void End() {
        System.out.println("结束测试");
    }

2.3 @BeforeEach,@AfterEach

  • @BeforeEach:当前 class 中每一个测试用例执行结束之前执行一次
  • @AfterEach:当前 class 中每一个测试用例执行结束之后执行一次
java 复制代码
@BeforeEach
    void StartV1() {
        System.out.println("开始执行");
    }
    @AfterEach
    void EndV1() {
        System.out.println("执行结束");
    }

3. 测试用例顺序指定

  • @TestMethodOrder(MethodOrderer.OrderAnnotation.class)

4. 参数化

4.1 单个参数

java 复制代码
	//单参数
    @ParameterizedTest
    @ValueSource(ints = {1,2,3,4})
    void Test03(int x) {
        System.out.println("接收参数是 x = " + x);
    }

单参数有它的弊端,只能接收一种类型的参数,对应的 Test 方法,只能接收一个参数

4.2 多个参数

java 复制代码
	//多参数
    @ParameterizedTest
    @CsvSource({"'张三','18'"})
    void Test04(String name, int age) {
        System.out.println(name + "今年 " + age + " 岁");
    }

参数化对应的注解上面如果写了Test,测试用例就会执行两次

其中一次就会报错,因为 Test 和 方法结合,没有找到参数,就会报错


java 复制代码
	//多参数,读取文件中的数据,进行操作
    @ParameterizedTest
    @CsvFileSource(resources = "test01.csv")
     void Test05(String name, int age) {
        System.out.println("name:" + name + ", age:" + age);
    }


4.3 通过方法生成

java 复制代码
	public static Stream<Arguments> Generate() {
        return Stream.of(
                Arguments.arguments("张三", 13),
                Arguments.arguments("李四",14)
        );
    }
    
	//通过方法生成测试数据
    @ParameterizedTest
    @MethodSource("Generate")
    void Test06(String name, int age) {
        System.out.println("姓名:" + name + "年龄:" + age);
    }

5. 测试套件

  • @Suite

6. 断言

6.1 断言相等

java 复制代码
//断言相等
    @Test
    void Test07() {
        int x = 10;
        int y = 20;
        Assertions.assertEquals(x, y);
    }

6.2 断言不相等

java 复制代码
	//断言不相等
    @Test
    void Test07() {
        int x = 10;
        int y = 20;
        Assertions.assertNotEquals(x, y);
    }

6.3 断言为空

java 复制代码
	//断言为空
    @Test
    void Test07() {
        int x = 10;
        int y = 20;
        String tmp = null;
        Assertions.assertNull(tmp);
    }

6.4 断言不为空

java 复制代码
	//断言不为空
    @Test
    void Test07() {
        int x = 10;
        int y = 20;
        String tmp = null;
        Assertions.assertNotNull(tmp);
    }
相关推荐
CarIise1 天前
Spring 框架:多配置文件、开发方式与 IOC 注解
junit·maven·jar
努力努力再努力wz1 天前
【Lua入门系列】从 Table 到元表与元方法:一文理解 Lua 的行为扩展机制
开发语言·junit·lua
麻瓜code2 天前
秒杀优化三连:Lua + 阻塞队列 + Redis Stream,响应从 3.4 秒到毫秒级
redis·junit·lua
贾伟康4 天前
【健康菜谱助手|08】HarmonyOS ArkTS 食材百科实战:实现分类、检索和详情跳转
软件测试·移动开发·harmonyos·arkts·arkui
努力努力再努力wz4 天前
【Lua 入门系列】从顺序执行到分支与循环:一文理解 Lua 控制结构、作用域与跳转规则
junit·单元测试·lua
howard20055 天前
软件测试课程架构思维导图
软件测试·课程架构
努力努力再努力wz5 天前
【Lua入门系列】从动态类型到变量作用域:彻底理解 local、全局变量与跨文件访问
开发语言·junit·lua
泽众云测试6 天前
泽众软件与广州华南检验检测中心签约,PerformanceRunner性能测试工具助力第三方测评机构性能检测能力升级
软件测试·测试工具·性能测试
aloha_7897 天前
Java 基础、集合、异常与 JUnit 5 速查
java·junit·sqlserver
贾伟康8 天前
【健康菜谱助手|06】HarmonyOS ArkTS 烹饪计时器实战:处理倒计时、暂停、恢复和到期反馈
软件测试·移动开发·harmonyos·arkts·arkui