JUnit4 & JUnit5 异常断言

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JUnit4 & JUnit5 异常断言相关的知识,希望对你有一定的参考价值。

参考技术A JUnit4 校验异常 message 需要进行额外处理。
如自定义一个 assertExceptionMessage() 校验函数。

JUnit5 可以同时校验异常类型和异常 mesage 。

JUNIT - 断言异常[重复]

【中文标题】JUNIT - 断言异常[重复]【英文标题】:JUNIT - Asserting Exceptions [duplicate] 【发布时间】:2017-02-05 08:49:27 【问题描述】:

我正在使用 JUNIT 4。我尝试使用以下代码断言异常,但没有成功。

@Rule
public ExpectedException thrown = ExpectedException.none();
thrown.expect(ApplicationException.class);

但是,当我使用以下注释时,它可以工作并且测试通过了。

@Test(expected=ApplicationException.class)

如果我遗漏了什么,请告诉我。

import org.junit.Rule;
import org.junit.rules.ExpectedException;

public class Test


    @Rule
    public ExpectedException exception = ExpectedException.none();

    @org.junit.Test
    public void throwsIllegalArgumentExceptionIfIconIsNull()
    


        exception.expect(IllegalArgumentException.class);
        toTest();
    

    private void toTest()
    
        throw new IllegalArgumentException();
    

【问题讨论】:

你能发一个minimal reproducible example吗? 对不起,我意识到完整的真实示例会更容易调试。 【参考方案1】:

使用 Rule 的另一种方法(更简单?)是在调用后您希望发生异常的地方放置一个 fail()。如果你得到异常,测试方法成功(你永远不会失败)。如果您没有收到异常并且到达了 fail() 语句,则测试失败。

【讨论】:

我也在寻找验证异常类型、代码和消息。您建议的方法是否可行?谢谢。 查看链接的重复问题/答案 - 这就是您要查找的内容【参考方案2】:

以下代码是使用异常规则的最小示例。

public class Test


    @Rule
    public ExpectedException exception = ExpectedException.none();

    @org.junit.Test
    public void throwsIllegalArgumentExceptionIfIconIsNull()
    
        exception.expect(IllegalArgumentException.class);
        toTest();
    

    private void toTest()
    
        throw new IllegalArgumentException();
    

另请参阅(Wiki entry about rules)

【讨论】:

谢谢!!我放了 exception.expect(IllegalArgumentException.class);下面 toTest() 并立即意识到愚蠢!

以上是关于JUnit4 & JUnit5 异常断言的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot2---单元测试(Junit5)

JUnit5快速上手(从JUnit4到JUnit5)

SpringBoot——单元测试之JUnit5

SpringBoot——单元测试之JUnit5

SpringBoot——单元测试之JUnit5

Springboot集成JUnit5优雅进行单元测试