• P01 单元测试


    系统:Win10
    Java:1.8.0_333
    IDEA:2020.3.4
    Gitee:https://gitee.com/lijinjiang01/JavaWeb

    1.单元测试概述

    1.1 单元测试概念

    单元测试:单元测试就是针对最小功能单元编写测试代码,Java 程序最小的功能单元是方法,因此,单元测试就是针对 Java 方法的测试,进而检查方法的正确性

    1.2 JUnit 单元测试框架

    JUnit 是使用 Java 语言实现的单元测试框架,它是开源的,Java 开发者都应当学习并使用 JUnit 编写单元测试
    此外,几乎所有的 IDE 都集成了 JUnit,这样我们就可以直接在 IDE 中编写并运行 JUnit 测试,Junit 目前最新版本是 5

    1.3 JUnit 优点

    JUnit 可以灵活选择执行哪些测试方法,可以一键执行全部测试方法的测试
    JUnit 可以生成测试报告,如果测试良好则是绿色;如果测试失败,则是红色
    单元测试中的某个方法测试失败了,不会影响其他测试方法的测试

    2.单元测试快速入门

    2.1 需求分析

    需求:使用单元测试进行业务方法预期结果、正确性测试的快速入门
    分析:

    1. 将 JUnit 的 jar 包导入到项目中
      IDEA 通常整合好了 JUnit 框架,一般不需要导入
      如果 IDEA 没有整合好,需要自己手工导入如下 2 个 JUnit 的 jar 包到模块
      在这里插入图片描述

    2. 编写测试方法:该测试方法必须是公共的无参数无返回值的非静态方法

    3. 在测试方法上使用 @Test 注解:标注该方法是一个测试方法

    4. 在测试方法中完成被测试方法的预期正确性测试

    5. 选中测试方法,选择“JUnit运行”,如果测试良好则是 绿色;如果测试失败,则是 红色

    2.2 代码实例

    先写一个方法类:

    package com.lijinjiang.service;
    
    public class UserService {
        public String login(String username, String password) {
            if ("admin".equals(username) && "123456".equals(password)){
                return "登录成功";
            } else {
                return "用户名或密码有问题";
            }
        }
    
        public void listUsers(){
            System.out.println(10/0);
            System.out.println("查询全部用户成功");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    写对应的测试方法:

    package com.lijinjiang.service;
    import org.junit.Assert;
    import org.junit.Test;
    
    public class TestUserService {
    
        /**
         * 测试方法
         * 注意点:
         * 1.必须是公开的、无参、无返回值的方法
         * 2.测试方法必须使用@Test注解标记
         */
        @Test
        public void testLogin() {
            UserService service = new UserService();
            String res = service.login("admin", "123456");
    
            // 进行预期结果的正确性测试:断言
            Assert.assertEquals("您的登录业务可能出现问题", "登录成功", res);
        }
    
        @Test
        public void testListUsers() {
            UserService service = new UserService();
            service.listUsers![在这里插入图片描述](https://img-blog.csdnimg.cn/0a3a4610561348bdb0b34f1a80fdeadf.png)
    ();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    2.3 执行测试

    执行单个测试方法
    在这里插入图片描述

    执行整个测试类的测试方法
    在这里插入图片描述

    执行整个模块的测试方法
    在这里插入图片描述

    3.单元测试常用注解

    3.1 JUnit 常用注解(JUnit 4.xx版本)

    注解说明
    @Test测试方法
    @Before用来修饰实例方法,该方法会在每一个测试方法执行之前执行一次
    @After用来修饰实例方法,该方法会在每一个测试方法执行之后执行一次
    @BeforeClass用来修饰静态方法,该方法会在所有测试方法之前只执行一次
    @AfterClass用来修饰静态方法,该方法会在所有测试方法之后只执行一次

    开始执行的方法:初始化资源
    之后执行的方法:释放资源

    3.2 常用注解的使用

    在 UserService 类中添加一个方法 insertUser

    package com.lijinjiang.service;
    
    public class UserService {
        public String login(String username, String password) {
            if ("admin".equals(username) && "123456".equals(password)){
                return "登录成功";
            } else {
                return "用户名或密码有问题";
            }
        }
    
        public void listUser(){
            System.out.println(10/0);
            System.out.println("查询全部用户成功");
        }
    
        public void insertUser(){
            System.out.println("插入用户成功");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    写一个执行使用这几个注解的测试类:

    package com.lijinjiang.service;
    import org.junit.*;
    
    public class TestAnnotation {
        @Before
        public void testBefore(){
            System.out.println("testBefore执行一次");
        }
    
        @After
        public void testAfter(){
            System.out.println("testAfter执行一次");
        }
    
        @BeforeClass
        public static void testBeforeClass(){
            System.out.println("testBeforeClass执行一次");
        }
    
        @AfterClass
        public static void testAfterClass(){
            System.out.println("testAfterClass执行一次");
        }
    
        @Test
        public void testLogin() {
            UserService service = new UserService();
            String res = service.login("admin", "123456");
    
            // 进行预期结果的正确性测试:断言
            Assert.assertEquals("您的登录业务可能出现问题", "登录成功", res);
        }
    
        @Test
        public void testInsertUser() {
            UserService service = new UserService();
            service.insertUser();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39

    运行该测试类并查看结果:
    在这里插入图片描述

    3.3 JUnit 常用注解(JUnit 5.xx版本)

    修改了几个注解的名字,功能并没有变化

    注解说明
    @Test测试方法
    @BeforeEach用来修饰实例方法,该方法会在每一个测试方法执行之前执行一次
    @AfterEach用来修饰实例方法,该方法会在每一个测试方法执行之后执行一次
    @BeforeAll用来修饰静态方法,该方法会在所有测试方法之前只执行一次
    @AfterAll用来修饰静态方法,该方法会在所有测试方法之后只执行一次
  • 相关阅读:
    20.移植Freetype字体库
    统信UOS系统开发笔记(七):在统信UOS系统上使用linuxdeployqt发布qt程序
    Javascript基础
    Excel 数据透视表教程大全之 05 数据透视表绘制各种二维排列的数据,实现双向枢轴(教程含数据)
    2023华为OD机试真题-2023(A+B卷)【Java、C++、Go、Python】
    搭建Redis集群
    ASCHIP_ISP Tool 工具 使用与更新
    窗口看门狗
    HTML+CSS大作业【传统文化艺术耍牙15页】学生个人网页设计作品
    数学分析—集合与映射
  • 原文地址:https://blog.csdn.net/qq_35132089/article/details/126934529