JUnit5学习之二:Assumptions类 (2)

在这里插入图片描述


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

在这里插入图片描述

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

Assumptions实战

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

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

@Test @DisplayName("最普通的assume用法") void tryAssumeTrue() { assumeTrue("CI".equals(envType)); log.info("CI环境才会打印的assumeTrue"); }

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代码

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

在这里插入图片描述


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

envType:CI

application.properties内容如下:

envType:PRODUCTION

完整的单元测试类如下,通过注解ActiveProfiles,指定了使用application-test.properties的配置,因此envType的值为CI:

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"); } }

执行结果如下图,可见assume通过,所有信息都被打印出来了:

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

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