Java:Junit4:异常测试不起作用,坚持使用 try-catch block :

标签 java unit-testing

我的测试:这是在萨克斯之后强调内容的地方。并坚持我有一个 try-catch block ....但是互联网上说测试异常的正确方法是 @Test(expected=IllegalArgumentException.class)

@Test(expected= XMLClientNotFoind.class)
public void testGetClientFromIP() throws XMLClientNotFound{
    ...
    assertEquals(c, sax.getClientFromIP("101.0.2.01"));
}

getClientFromIP 方法在这里:

  public Client getClientFromIP(String ip) throws XMLClientNotFound {
        ...
        throw new XMLClientNotFound();
  }

我的异常(exception)是:

   public class XMLClientNotFound extends Exception{

    }

最佳答案

首先:

@Test(expected=IllegalArgumentException.class)

不应被视为一种正确的方法,尤其是在存在此类通用异常的情况下。原因是您无法控制测试方法中的哪个语句实际引发了异常。此外,您不能对消息标签、原因等做出任何断言。

使用 try-catch 准确地包围假设抛出异常的行是正确的方法:

try {
    shouldThrow()
    fail("Expected exception");
} catch(XMLClientNotFound e) {
    assertThat(e).hasMessage("Expected message");  //FEST-Assert syntax
}

您也可以尝试我 wrote 中的 JUnit @Rule前一段时间让你的测试更具可读性。

关于Java:Junit4:异常测试不起作用,坚持使用 try-catch block :,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4937938/

相关文章:

java - Spring:如何在 Map 之外声明名称/值对?

java - 将日期字符串转换为 UTC 格式

c - 如何在检查单元测试中设置从文件读取输入的路径?

javascript - 是否有 javascript 框架来根据浏览器类型运行单元测试

java - Linux 上的 JSCH 抛出 java.awt.HeadlessException

JavaCV FFmpegFrameFilter 不适用于 fps 过滤器

java - Android中执行后台定时重复任务,以及IntentService和Runnable的区别

java - 在 Java 中使用泛型为类编写什么单元测试?

angularjs - 在 karma jasmine 中测试 $http.post 方法

c# - 代码访问 ActiveDirectory 的单元测试