欢迎访问我的GitHub
https://github.com/zq2599/blog_demos
内容:所有原创文章分类汇总及配套源码,涉及Java、Docker、Kubernetes、DevOPS等;
关于《JUnit5学习》系列《JUnit5学习》系列旨在通过实战提升SpringBoot环境下的单元测试技能,一共八篇文章,链接如下:
基本操作
Assumptions类
Assertions类
按条件执行
标签(Tag)和自定义注解
参数化测试(Parameterized Tests)基础
参数化测试(Parameterized Tests)进阶
综合进阶(终篇)
本篇概览本文是《JUnit5学习》系列的第二篇,学习一个重要的知识点:Assumptions类,只有了解了它们,才好继续后面的学习,全篇章节如下:
Assertions和Assumptions简介
写一段代码对比效果
Assumptions编码
查看执行结果
源码下载如果您不想编码,可以在GitHub下载所有源码,地址和链接信息如下表所示:
名称 链接 备注项目主页 https://github.com/zq2599/blog_demos 该项目在GitHub上的主页
git仓库地址(https) https://github.com/zq2599/blog_demos.git 该项目源码的仓库地址,https协议
git仓库地址(ssh) git@github.com:zq2599/blog_demos.git 该项目源码的仓库地址,ssh协议
这个git项目中有多个文件夹,本章的应用在junitpractice文件夹下,如下图红框所示:
junitpractice是父子结构的工程,本篇的代码在assertassume子工程中,如下图:
Assertions和Assumptions简介Assumptions和Assertions容易混淆,因此这里通过对比它们来学习:
Assertions即断言类,里面提供了很多静态方法,例如assertTrue,如果assertTrue的入参为false,就会抛出AssertionFailedError异常,Junit对抛出此异常的方法判定为失败;
Assumptions即假设类,里面提供了很多静态方法,例如assumeTrue,如果assumeTrue的入参为false,就会抛出TestAbortedException异常,Junit对抛出此异常的方法判定为跳过;
简单的说,Assertions的方法抛出异常意味着测试不通过,Assumptions的方法抛出异常意味着测试被跳过(为什么称为"跳过"?因为mvn test的执行结果被标记为Skipped);
写一段代码对比效果用代码来验证的效果最好,如下所示,一共四个方法,assertSuccess不抛出AssertionFailedError异常,assertFail抛出AssertionFailedError异常,assumpSuccess不抛出TestAbortedException异常,assumpFail抛出TestAbortedException异常
package com.bolingcavalry.assertassume.service.impl; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assumptions.assumeTrue; @SpringBootTest @Slf4j public class AssertAssumpTest { /** * 最简单的成功用例 */ @Test void assertSuccess() { assertEquals(2, Math.addExact(1,1)); } /** * 最简单的失败用例 */ @Test void assertFail() { assertEquals(3, Math.addExact(1,1)); } /** * assumeTrue不抛出异常的用例 */ @Test void assumpSuccess() { // assumeTrue方法的入参如果为true,就不会抛出异常,后面的代码才会继续执行 assumeTrue(true); // 如果打印出此日志,证明assumeTrue方法没有抛出异常 log.info("assumpSuccess的assumeTrue执行完成"); // 接下来是常规的单元测试逻辑 assertEquals(2, Math.addExact(1,1)); } /** * assumeTrue抛出异常的用例 */ @Test void assumpFail() { // assumeTrue方法的入参如果为false,就会抛出TestAbortedException异常,后面就不会执行了 assumeTrue(false, "未通过assumeTrue"); // 如果打印出此日志,证明assumpFail方法没有抛出异常 log.info("assumpFail的assumeTrue执行完成"); // 接下来是常规的单元测试逻辑,但因为前面抛出了异常,就不再执行了 assertEquals(2, Math.addExact(1,1)); } }点击下图红框位置执行单元测试:
3. 执行结果如下: