• SpringBoot整合Junit


    作者:大三的土狗

    专栏:SpringBoot入门到精通
    在这里插入图片描述


    前言

    Java语言的单元测试框架
      JUnit是一个Java语言的单元测试框架。它由Kent Beck和Erich Gamma建立,逐渐成为源于Kent Beck的sUnit的xUnit家族中最为成功的一个。 JUnit有它自己的JUnit扩展生态圈。多数Java的开发环境都已经集成了JUnit作为单元测试的工具。


    1、Junit简介

    1)Junit是什么

      JUnit是由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架。Junit测试是程序员测试,即所谓白盒测试,因为程序员知道被测试的软件如何(How)完成功能和完成什么样(What)的功能。Junit是一套框架,继承TestCase类,就可以用Junit进行自动测试了。
    在这里插入图片描述

    2)单元测试

      单元测试(英语:Unit Testing)又称为模块测试 ,是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作。

      单元测试允许程序员在未来重构代码,并且确保模块依然工作正确(复合测试)。这个过程就是为所有函数和方法编写单元测试,一旦变更导致错误发生,借助于单元测试可以快速定位并修复错误。
      单元测试可以由两种方式完成:

    手工测试自动化测试
    定义手动执行测试用例并不借助任何工具的测试被称为人工测试。借助工具支持并且利用自动工具执行用例被称为自动测试。
    效率消耗时间并单调:由于测试用例是由人力资源执行,所以非常缓慢并乏味。快速自动化运行测试用例时明显比人力资源快。
    人力资源要求人力资源上投资巨大:由于测试用例需要人工执行,所以在人工测试上需要更多的试验员。人力资源投资较少:测试用例由自动工具执行,所以在自动测试中需要较少的试验员。
    可信度可信度较低:人工测试可信度较低是可能由于人工错误导致测试运行时不够精确。可信度更高:自动化测试每次运行时精确地执行相同的操作。
    程式化非程式化:编写复杂并可以获取隐藏的信息的测试的话,这样的程序无法编写。程式化:试验员可以编写复杂的测试来显示隐藏信息。

    3)Junit特点

    特点:

    • JUnit 是一个开放的资源框架,用于编写和运行测试。 提供注解来识别测试方法。 提供断言来测试预期结果。 提供测试运行来运行测试。
    • JUnit 测试允许你编写代码更快,并能提高质量。 JUnit 优雅简洁。没那么复杂,花费时间较少。
    • JUnit测试可以自动运行并且检查自身结果并提供即时反馈。所以也没有必要人工梳理测试结果的报告。
    • JUnit测试可以被组织为测试套件,包含测试用例,甚至其他的测试套件。
    • JUnit 在一个条中显示进度。如果运行良好则是绿色;如果运行失败,则变成红色。

    2、Spring整合Junit

    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(classes = SpringConfig.class)
    public class UserServiceTest {
        
        @Autowired
        private TestService testService;
        
        @Test
        public void testSave(){
            TestService.save();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    使用 @RunWith 注解指定运行器,使用 @ContextConfiguration 注解来指定配置类或者配置文件。

    3、SpringBoot整合Junit

    1)准备环境

    1)创建一个名为Junit的 SpringBoot 工程,工程目录结构如下

    在这里插入图片描述
    2)添加Junit依赖

    		<dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
            </dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    3)代码测试用例
    在 com.example.junit.service下创建 TestService`接口,内容如下

    package com.example.junit.services;
    
    public interface TestService {
    
        public void save();
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在com.example.junit.services.impl包写创建一个TestServiceImpl类,使其实现 TestService 接口,内容如下

    package com.example.junit.services.impl;
    
    import com.example.junit.services.TestService;
    import org.springframework.stereotype.Service;
    
    @Service
    public class TestServiceImpl implements TestService {
        @Override
        public void save() {
            System.out.println("save method");
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    2)编写测试类

    创建测试类,将TestService`注入到该测试类中

    package com.example.junit;
    
    import com.example.junit.services.TestService;
    import org.junit.jupiter.api.Test;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    
    @SpringBootTest
    class JunitApplicationTests {
    
        @Autowired
        private TestService testService;
    
        @Test
        void Test() {
            testService.save();
        }
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    测试结果
    在这里插入图片描述

    4、SpringBoot的优势

    SpringBoot 整合 junit 特别简单,分为以下三步完成

    • 在测试类上添加 SpringBootTest 注解
    • 使用 @Autowired 注入要测试的资源
    • 定义测试方法进行测试

    总结

      单元测试允许程序员在未来重构代码,并且确保模块依然工作正确(复合测试)。这个过程就是为所有函数和方法编写单元测试,一旦变更导致错误发生,借助于单元测试可以快速定位并修复错误。

  • 相关阅读:
    java高级用法之:JNA中的回调
    React中父子组件参数传递讲解
    java计算机毕业设计健身房管理系统源码+数据库+系统+lw文档+mybatis+运行部署
    牛客多校10 - Reviewer Assignment(最大匹配)
    Python - Word转TXT文本,或TXT文本转Word
    Linux网络:IP协议
    MATLB|实时机会约束决策及其在电力系统中的应用
    python内置模块subprocess 模块,创建和管理子进程
    ADO.net的基本用法
    【生成式网络】入门篇(三):Style Transfer 的 代码和结果记录
  • 原文地址:https://blog.csdn.net/qq_53463544/article/details/126302080