JUnit5学习之二:Assumptions类

欢迎访问我的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. 执行结果如下:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsxjsx.html