Junit5入门小总结(超详细)持续更新···

本文详细介绍了Junit5的使用,包括自定义测试运行器、常用注解如@Test、@BeforeAll、@AfterEach等,Assumptions和Assertions类的断言方法,超时测试的实现,第三方断言库的集成,以及按条件执行的测试策略。此外,还深入讲解了@Tag和自定义注解的运用,以及如何通过maven命令和surefire插件进行标签过滤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Junit5

java单元测试

自定义测试运行器

测试的类很多,组合在一起成为一个测试套件
`@ExtendWith`
正常情况下仅SpringBootTest注解即可,如果对扩展性有更多需求,可以添加ExtendWith注解
    @ExtendWith(DatabaseExtension.class)
    @ExtendWith(WebServerExtension.class)
    class MySecondTests{
        //...
    }

常用注解(Springboot环境)

ExtendWith

这是用来取代旧版本中的RunWith注解,
不过在SpringBoot环境如果没有特别要求无需额外配置,因为SpringBootTest中已经有了;

Test

被该注解修饰的就是测试方法;

BeforeAll

在所有测试方法执行前被执行
被该注解修饰的必须是静态方法,会在所有测试方法之前执行,会被子类继承,
取代低版本的BeforeClass;

AfterAll

在所有测试方法执行后被执行
被该注解修饰的必须是静态方法,会在所有测试方法执行之后才被执行,会被子类继承,
取代低版本的AfterClass;

BeforeEach

每个测试方法执行前都会执行一次
被该注解修饰的方法会在每个测试方法执行前被执行一次,会被子类继承,
取代低版本的Before;

AfterEach

每个测试方法执行后都会执行一次
被该注解修饰的方法会在每个测试方法执行后被执行一次,会被子类继承,取代低版本的Before;

DisplayName

测试方法的展现名称,在测试框架中展示,支持emoji;
示例:
    @Test
    @DisplayName("测试service层的hello方法")
    void hello() {
        log.info("execute hello");
        assertThat(helloService.hello(NAME)).isEqualTo("Hello " + NAME);
    }

Timeout

超时时长,被修饰的方法如果超时则会导致测试不通过;
代码示例:
    @Test
    @Timeout(unit = TimeUnit.MILLISECONDS, value = 500)//500毫秒
    @Disabled
    void remoteRequest() {
        assertThat(helloService.remoteRequest()).isEqualTo(true);
    }

Disabled

不会被执行的测试方法;

Assumptions类和Assertions类

Assertions类

是断言类,里面提供了很多静态方法,
例如assertTrue,如果assertTrue的入参为false,就会抛出AssertionFailedError异常,
Junit对抛出此异常的方法判定为失败;
简而言之,Assertions的方法抛出异常意味着测试不通过。
assertEquals()方法
测试是否和目标一致
如果不一致即失败,则抛出AssertionFailedError异常
最简单的判断(两个入参相等就不抛异常):
    @Test
    @DisplayName("最普通的判断")
    void standardTest() {
       assertEquals(2, Math.addExact(1, 1));
    }
还有另一个assertEquals方法,
能接受Supplier类型的入参,
当判断不通过时才会调用Supplier.get方法获取字符串作为失败提示消息
(如果测试通过则Supplier.get方法不会被执行):
    @Test
    @DisplayName("带失败提示的判断(拼接消息字符串的代码只有判断失败时才执行)")
    void assertWithLazilyRetrievedMessage() {
        int expected = 2;
        int actual = 1;

        assertEquals(expected,
                actual,
                // 这个lambda表达式,只有在expected和actual不相等时才执行
                ()->String.format("期望值[%d],实际值[%d]", expected, actual));
    }
assertAll()方法
可以将多个判断逻辑放在一起处理,
只要有一个报错就会导致整体测试不通过,
并且执行结果中会给出具体的失败详情:
    @Test
    @DisplayName("批量判断(必须全部通过,否则就算失败)")
    void groupedAssertions() {
        // 将多个判断放在一起执行,只有全部通过才算通过,如果有未通过的,会有对应的提示
        assertAll("单个测试方法中多个判断",
                () -> assertEquals(1, 1),
            
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值