软件测试教程 自动化测试之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);
    }
相关推荐
ipad协议源码10 小时前
为何网站会出现的挂马?
junit·软件开发·开源源码
再玩一会儿看代码1 天前
JUnit 测试框架详解:从实际开发、业务测试到 Java 面试高频问题
java·经验分享·笔记·junit·面试
测试秃头怪2 天前
如何评估自动化测试脚本的编写时间和维护工作量?
自动化测试·软件测试·python·功能测试·测试工具·职场和发展·测试用例
程序员杰哥2 天前
接口测试知识总结
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·接口测试
童话的守望者3 天前
BookHub (RWCTF 2018) 通关
junit
测试老哥3 天前
Pytest自动化测试详解
自动化测试·软件测试·python·测试工具·测试用例·pytest·接口测试
程序员小远4 天前
性能测试之性能调优
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·性能测试
程序员小远4 天前
接口测试之文件上传
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·接口测试