https://github.com/zq2599/blog_demosjava
内容:全部原创文章分类汇总及配套源码,涉及Java、Docker、Kubernetes、DevOPS等;git
《JUnit5学习》系列旨在经过实战提高SpringBoot环境下的单元测试技能,一共八篇文章,连接以下:程序员
本文是《JUnit5学习》系列的第二篇,学习一个重要的知识点: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协议 |
Assumptions和Assertions容易混淆,所以这里经过对比它们来学习:spring
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. 执行结果以下:shell
4. 另外,在target目录,能够看到surefire插件生成的单元测试报告TEST-com.bolingcavalry.assertassume.service.impl.AssertAssumpTest.xml,以下图所示,testcase节点中出现了skipped节点:数据库
弄清楚的Assertions和Assumptions的区别,接下来趁热打铁,学习Assumptions类中几个重要的静态方法:assumeTrue、assumingThatapi
@Test @DisplayName("最普通的assume用法") void tryAssumeTrue() { assumeTrue("CI".equals(envType)); log.info("CI环境才会打印的assumeTrue"); }
@Test @DisplayName("assume失败时带自定义错误信息") void tryAssumeTrueWithMessage() { // 第二个入参是Supplier实现,返回的内容用做跳过用例时的提示信息 assumeTrue("CI".equals(envType), () -> "环境不匹配而跳过,当前环境:" + envType); log.info("CI环境才会打印的tryAssumeTrueWithMessage"); }
效果以下图:springboot
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"); }
2. application-test.properties内容以下:
envType:CI
envType:PRODUCTION
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.beans.factory.annotation.Value; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.ActiveProfiles; import static org.junit.jupiter.api.Assumptions.assumeTrue; import static org.junit.jupiter.api.Assumptions.assumingThat; @SpringBootTest @Slf4j @ActiveProfiles("test") public class AssumptionsTest { @Value("${envType}") private String envType; @Test @DisplayName("最普通的assume用法") void tryAssumeTrue() { assumeTrue("CI".equals(envType)); log.info("CI环境才会打印的assumeTrue"); } @Test @DisplayName("assume失败时带自定义错误信息") void tryAssumeTrueWithMessage() { // 第二个入参是Supplier实现,返回的内容用做跳过用例时的提示信息 assumeTrue("CI".equals(envType), () -> "环境不匹配而跳过,当前环境:" + envType); log.info("CI环境才会打印的tryAssumeTrueWithMessage"); } @Test @DisplayName("assume成功时执行指定逻辑") void tryAssumingThat() { // 第二个入参是Executable实现, // 当第一个参数为true时,执行第二个参数的execute方法 assumingThat("CI".equals(envType), () -> { log.info("这一行内容只有在CI环境才会打印"); }); log.info("不管什么环境都会打印的tryAssumingThat"); } }
微信搜索「程序员欣宸」,我是欣宸,期待与您一同畅游Java世界...
https://github.com/zq2599/blog_demos