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

Nul*_*uli 4 java unit-testing

我的测试:这是它强调萨克斯之后的东西.并且坚持认为我有一个try-catch块....但互联网说,测试异常的正确方法是@Test(expected=IllegalArgumentException.class)

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

方法getClientFromIP在这里:

  public Client getClientFromIP(String ip) throws XMLClientNotFound {
        ...
        throw new XMLClientNotFound();
  }
Run Code Online (Sandbox Code Playgroud)

我的例外:

   public class XMLClientNotFound extends Exception{

    }
Run Code Online (Sandbox Code Playgroud)

Tom*_*icz 7

首先:

@Test(expected=IllegalArgumentException.class)
Run Code Online (Sandbox Code Playgroud)

不应被视为一种正确的方式,特别是对于这样的一般例外.原因是您无法控制测试方法中的哪个语句实际抛出异常.你也不能在消息标签,原因等上做任何断言.

try-catch精确地使用假定抛出异常的行是正确的方法:

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

您也可以尝试@Rule我前一段时间写的 JUnit ,以使您的测试更具可读性.