当前位置: 首页 > article >正文

【SpringBoot应用篇】SpringBoot集成JUnit单元测试

【SpringBoot应用篇】SpringBoot集成JUnit单元测试

  • 1. 概述
  • 2. JUnit 特点
  • 3. 第一个 JUnit 单元测试
    • 3.1 POM
    • 3.2 创建测试类
  • 4. JUnit 注解
  • 5. JUnit 断言
    • 5.1 什么是断言
    • 5.2 常用断言方法
    • 5.3 测试断言效果
  • 6. SpringBoot-Test 测试模块
    • JUnit5 的变化
    • 测试类

1. 概述

JUnit 是用于编写和运行可重复的自动化测试的开源测试框架,这样可以保证我们的代码按预期工作。JUnit 可广泛用于工业和作为支架(从命令行)或IDE(如 IDEA)内单独的 Java 程序。

JUnit 提供:

  • 断言测试预期结果。
  • 测试功能共享通用的测试数据。
  • 测试套件轻松地组织和运行测试。
  • 图形和文本测试运行。

JUnit 用于测试:

  • 整个对象
  • 对象的一部分 - 交互的方法或一些方法
  • 几个对象之间的互动(交互)

2. JUnit 特点

  • JUnit 是用于编写和运行测试的开源框架。
  • 提供了注释,以确定测试方法。
  • 提供断言测试预期结果。
  • 提供了测试运行的运行测试。
  • JUnit 测试让您可以更快地编写代码,提高质量
  • JUnit 是优雅简洁。它是不那么复杂以及不需要花费太多的时间。
  • JUnit 测试可以自动运行,检查自己的结果,并提供即时反馈。没有必要通过测试结果报告来手动梳理。
  • JUnit 测试可以组织成测试套件包含测试案例,甚至其他测试套件。
  • Junit 显示测试进度的,如果测试是没有问题条形是绿色的,测试失败则会变成红色。

3. 第一个 JUnit 单元测试

3.1 POM

pom.xml 文件如下:这里使用Junit4

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.zysheep</groupId><artifactId>hello-spring</artifactId><version>1.0.0-SNAPSHOT</version><packaging>jar</packaging><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>4.3.17.RELEASE</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency></dependencies>
</project>

主要增加了 junit:junit 依赖

3.2 创建测试类

在测试包下 src/main/test 创建一个名为 MyTest 的测试类,代码如下:

package com.zysheep.hello.spring.test;import org.junit.After;
import org.junit.Before;
import org.junit.Test;public class MyTest {/*** 执行测试方法前执行*/@Beforepublic void before() {System.out.println("执行 before() 方法");}/*** 执行测试方法后执行*/@Afterpublic void after() {System.out.println("执行 after() 方法");}@Testpublic void testSayHi() {System.out.println("Hi Log4j");}@Testpublic void testSayHello() {System.out.println("Hello Log4j");}
}

4. JUnit 注解

注解描述
@Test
public void method()测试注释指示该公共无效方法它所附着可以作为一个测试用例。
@Before
public void method()Before 注释表示,该方法必须在类中的每个测试之前执行,以便执行测试某些必要的先决条件。
@BeforeClass
public static void method() BeforeClass注释指出这是附着在静态方法必须执行一次并在类的所有测试之前。发生这种情况时一般是测试计算共享配置方法(如连接到数据库)。
@After
public void method()After 注释指示,该方法在执行每项测试后执行(如执行每一个测试后重置某些变量,删除临时变量等)
@AfterClass
public static void method()当需要执行所有的测试在 JUnit 测试用例类后执行,AfterClass 注解可以使用以清理建立方法,(从数据库如断开连接)。注意:附有此批注(类似于 BeforeClass)的方法必须定义为静态。
@Ignore
public static void method()当想暂时禁用特定的测试执行可以使用忽略注释。每个被注解为 @Ignore 的方法将不被执行。

5. JUnit 断言

5.1 什么是断言

断言是编程术语,表示为一些布尔表达式,程序员相信在程序中的某个特定点该表达式值为真,可以在任何时候启用和禁用断言验证,因此可以在测试时启用断言而在部署时禁用断言。同样,程序投入运行后,最终用户在遇到问题时可以重新启用断言。

使用断言可以创建更稳定、品质更好且 不易于出错的代码。当需要在一个值为 false 时中断当前操作的话,可以使用断言。单元测试必须使用断言(Junit/JunitX)。

5.2 常用断言方法

断言描述
void assertEquals([String message], expected value, actual value)断言两个值相等。值可能是类型有 int, short, long, byte, char or java.lang.Object.
void assertTrue([String message], boolean condition)断言一个条件为真
void assertFalse([String message],boolean condition)断言一个条件为假
void assertNotNull([String message], java.lang.Object object)断言一个对象不为空(null)
void assertNull([String message], java.lang.Object object)断言一个对象为空(null)
void assertSame([String message], java.lang.Object expected, java.lang.Object actual)断言,两个对象引用相同的对象
void assertNotSame([String message], java.lang.Object unexpected, java.lang.Object actual)断言,两个对象不是引用同一个对象
void assertArrayEquals([String message], expectedArray, resultArray)断言预期数组和结果数组相等。数组的类型可能是 int, long, short, char, byte or java.lang.Object.

5.3 测试断言效果

在之前的单元测试类中创建一个名为 testAssert 方法来查看断言效果

/*** 测试断言*/
@Test
public void testAssert() {String obj1 = "junit";String obj2 = "junit";String obj3 = "test";String obj4 = "test";String obj5 = null;int var1 = 1;int var2 = 2;int[] arithmetic1 = {1, 2, 3};int[] arithmetic2 = {1, 2, 3};Assertions.assertEquals(obj1, obj2);Assertions.assertSame(obj3, obj4);Assertions.assertNotSame(obj2, obj4);Assertions.assertNotNull(obj1);Assertions.assertNull(obj5);Assertions.assertTrue("为真", var1 == var2);Assertions.assertArrayEquals(arithmetic1, arithmetic2);
}

如果预期结果与实际结果不一致,会测试失败提示
在这里插入图片描述

6. SpringBoot-Test 测试模块

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId>
</dependency>

在这里插入图片描述

JUnit5 的变化

Spring Boot 2.2.0 版本开始引入 JUnit 5 作为单元测试默认库
作为最新版本的JUnit框架,JUnit5与之前版本的Junit框架有很大的不同。由三个不同子项目的几个不同模块组成。

JUnit 5 = JUnit Platform + JUnit Jupiter + JUnit Vintage

JUnit Platform: Junit Platform是在JVM上启动测试框架的基础,不仅支持Junit自制的测试引擎,其他测试引擎也都可以接入。
JUnit Jupiter: JUnit Jupiter提供了JUnit5的新的编程模型,是JUnit5新特性的核心。内部 包含了一个测试引擎,用于在Junit Platform上运行。
JUnit Vintage: 由于JUint已经发展多年,为了照顾老的项目,JUnit Vintage提供了兼容JUnit4.x,Junit3.x的测试引擎。

测试类

SpringBoot的测试类版本问题,2.2版本之前和2.2版本之后是不一样的,在2.2版本之前需要注解@SpringBootTest@RunWith(SpringRunner.class)才能加载Spring容器进行测试,因为@Test导包的是org.junit.Test,而 在2.2版本之后只需要使用注解@SpringBootTest,@Test导包为org.junit.jupiter.api.Test。即导入@Test导包为org.junit.jupiter.api.Test可以不加@RunWith(SpringRunner.class)注解。

在这里插入图片描述


编写测试类问题: 测试类和启动类包路径不同,需要指定@SpringBootTest(classes = JdbcApplication.class),启动类的Class类型。包路径相同,启动类的Class类型可以不写
在这里插入图片描述

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

相关文章:

  • tinyxml和rapidxml
  • Windows上Qt开发环境搭建
  • 浅析入侵检测系统及最新研究
  • 攻防世界-easyphp 思路分析
  • 文献翻译 | Frequency Domain De-correlation Parameter in Speech Noise Reduction System Based on Frequency
  • java web配置servlet实现图像验证码
  • artDialog的使用笔记
  • 冰河木马简易使用 ——病毒木马 003
  • 饼状图(PieChart)与柱形图(BarChart)的使用
  • 【视频编解码】H264入门
  • 你们大学还用Protel 99 SE、51单片机吗?
  • ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务【解决思路】
  • 【小呆的力学笔记】弹塑性力学的初步认知三:广义胡克定律
  • linux mrtg 命令,linux服务器之流量监控(MRTG)
  • 【修复版】免费微信小游戏源码h5赛马php网页开源可二次开发,附安装教程
  • css单线边框_css border-collapse设置表格单线边框和双线边框
  • Linux AVG ANTIVIRUS FREE使用介绍
  • CPE上的STUN和TR069功能详解和实验
  • Divx编解码器的研究与设计
  • 系统结构期末复习(四)指令级并行
  • deleteRow() 连续删除多行
  • js发送邮件
  • 怎么查看文件的MD5码
  • 一、 QTP的前世今生
  • 基于VirtualBox虚拟机安装Ubuntu图文教程
  • jersey 入门示例_Jersey Web Service Hello World Java示例
  • 12款国内外企业协作工具推荐
  • SEO数据监控技巧都有哪些?
  • 如何优化网页加载速度?
  • 如何利用Python监控你女/男朋友每天都在浏览什么网站?