JUnit5学习之二:Assumptions类

| 名称 | 链接 | 备注 |

| :-- | :-- | :-- |

| 项目主页 | 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协议 |

  1. 这个git项目中有多个文件夹,本章的应用在junitpractice文件夹下,如下图红框所示:

在这里插入图片描述

  1. junitpractice是父子结构的工程,本篇的代码在assertassume子工程中,如下图:

在这里插入图片描述

Assertions和Assumptions简介

Assumptions和Assertions容易混淆,因此这里通过对比它们来学习:

  1. Assertions即断言类,里面提供了很多静态方法,例如assertTrue,如果assertTrue的入参为false,就会抛出AssertionFailedError异常,Junit对抛出此异常的方法判定为失败;

  2. Assumptions即假设类,里面提供了很多静态方法,例如assumeTrue,如果assumeTrue的入参为false,就会抛出TestAbortedException异常,Junit对抛出此异常的方法判定为跳过;

  3. 简单的说,Assertions的方法抛出异常意味着测试不通过,Assumptions的方法抛出异常意味着测试被跳过(为什么称为"跳过"?因为mvn test的执行结果被标记为Skipped);

写一段代码对比效果

  1. 用代码来验证的效果最好,如下所示,一共四个方法,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));

}

}

  1. 点击下图红框位置执行单元测试:

在这里插入图片描述

  1. 执行结果如下:

在这里插入图片描述

  1. 另外,在target目录,可以看到surefire插件生成的单元测试报告TEST-com.bolingcavalry.assertassume.service.impl.AssertAssumpTest.xml,如下图所示,testcase节点中出现了skipped节点:

在这里插入图片描述

  • 上述对比验证再次说明Assertions和Assumptions的区别:都用来对比预期值和实际值,当预期值和实际值不一致时,Assertions的测试结果是执行失败,Assumptions的测试结果是跳过(或者忽略);

Assumptions实战

弄清楚的Assertions和Assumptions的区别,接下来趁热打铁,学习Assumptions类中几个重要的静态方法:assumeTrue、assumingThat

  1. 最简单的用法如下,可见只有assumeTrue不抛出异常,后面的log.info才会执行:

@Test

@DisplayName(“最普通的assume用法”)

void tryAssumeTrue() {

assumeTrue(“CI”.equals(envType));

log.info(“CI环境才会打印的assumeTrue”);

}

  1. assumeTrue可以接受Supplier类型作为第二个入参,如果assumeTrue失败就会将第二个参数的内容作为失败提示:

@Test

@DisplayName(“assume失败时带自定义错误信息”)

void tryAssumeTrueWithMessage() {

// 第二个入参是Supplier实现,返回的内容用作跳过用例时的提示信息

assumeTrue(“CI”.equals(envType),

() -> “环境不匹配而跳过,当前环境:” + envType);

log.info(“CI环境才会打印的tryAssumeTrueWithMessage”);

}

效果如下图:

在这里插入图片描述

3. 还有个assumingThat方法,可以接受Executable类型作为第二个入参,如果第一个入参为true就会执行Executable的execute方法,注意assumingThat方法的特点:不抛出异常,因此其所在的方法不会被跳过,这是和assumeTrue相比最大的区别(assumeTrue一旦入参为false就会抛出异常,其所在方法就被标记为跳过):

@Test

@DisplayName(“assume成功时执行指定逻辑”)

void tryAssumingThat() {

// 第二个入参是Executable实现,

// 当第一个参数为true时,执行第二个参数的execute方法

assumingThat(“CI”.equals(envType),

() -> {

log.info(“这一行内容只有在CI环境才会打印”);

});

log.info(“无论什么环境都会打印的tryAssumingThat”);

}

  • 接下来咱们执行上述代码,看看效果;

执行Assumptions代码

  1. 先做准备工作,本次实战的springboot工程名为assertassume,咱们在工程的resources目录下添加两个配置文件:application.properties和application-test.properties,位置如下图:

在这里插入图片描述

  1. application-test.properties内容如下:

envType:CI

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后

对于很多Java工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。

整理的这些资料希望对Java开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。

再分享一波我的Java面试真题+视频学习详解+技能进阶书籍

美团二面惜败,我的凉经复盘(附学习笔记+面试整理+进阶书籍)

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
/>

最后

对于很多Java工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。

整理的这些资料希望对Java开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。

再分享一波我的Java面试真题+视频学习详解+技能进阶书籍

[外链图片转存中…(img-5sxZGcgf-1712641801328)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 15
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值