如何在junit中测试异常[重复]

Posted

技术标签:

【中文标题】如何在junit中测试异常[重复]【英文标题】:How to test for the exception in junit [duplicate] 【发布时间】:2018-07-20 11:22:09 【问题描述】:

假设我的方法 myMethod 检查了一系列场景,然后相应地抛出异常而不处理这些异常。

public MyResponse myMethod(MyRequest req)

    try
       
          if(req.property1 == null || req.property1.isEmpty())
             throw new Exception("Property 1 is null of empty");

          if(req.property2 == null || req.property2.isEmpty())
             throw new Exception("Property 2 is null of empty");

          //if no problem is found then proceed ...
       
       catch(Exception e)
       
          //log error
          throw e;
       


如何测试引发的异常或至少检查与异常一起发送的消息?

@Test
public void aNullOrEmptyProperty1CausesExceptionTest() throws Exception 
    //..
    String property1 = "";
    req.setProperty1(property1);
    //...
    MyResponse response = target.myMethod(req);

    //How to check for the exception?

感谢您的帮助

【问题讨论】:

就像你在 myMethod 中所做的一样,你会想要 catch 它。 我需要赶上吗? 【参考方案1】:

我不知道它是否适用于所有版本的 JUnit(我使用的是 junit 4.12)。我通常做的是在Test注解之后添加预期的异常,例如:

@Test(expected = MySpecificException.class)

还有其他方法可以做,但这是可能的。您可以创建一个特定的 MySpecificException 类(它扩展了 Exception 类),然后在代码中抛出这个特定的异常。然后你可以用junit检查它是否正确抛出。

玩得开心!

【讨论】:

查看链接的重复答案,了解为什么这并不总是有效。 它工作正常。如果您想访问异常对象并读取发送的消息怎么办?

以上是关于如何在junit中测试异常[重复]的主要内容,如果未能解决你的问题,请参考以下文章

JUnit 测试异常 [重复]

JUnit 5:如何断言抛出异常?

JUnit 4 如何正确测试异常

如何让 JUnit 测试(从 Ant 脚本驱动)转储导致失败的异常堆栈?

如何使用 JUnit Test 注释断言我的异常消息?

使用 JPA 和 JUnit 测试时如何一致地擦除内存数据库中的 H2 [重复]