我正在为解析字符串的构造函数编写一个jUnit测试,然后检查很多事情。当数据错误时,每件事都会抛出带有不同消息的IllegalArgumentException。
所以我想为此编写测试,但是我如何识别抛出了什么错误?
这是我该怎么做:

@Test(expected=IllegalArgumentException.class)
public void testRodneCisloRok(){
    new RodneCislo("891415",dopocitej("891415"));
}

这就是我想要的样子,但是我不知道是否有可能以某种方式编写它:
@Test(expected=IllegalArgumentException.class("error1"))
public void testRodneCisloRok(){
    new RodneCislo("891415",dopocitej("891415"));
}

最佳答案

您需要以老式的方式进行操作:

@Test
public void testRodneCisloRok() {
    try {
       new RodneCislo("891415",dopocitej("891415"));
       fail("expected an exception");
    } catch (IllegalArgumentException ex) {
       assertEquals("error1", ex.getMessage());
    }
}
@Test(expected=...)语法很方便,但是在许多情况下太简单了。

如果区分异常条件很重要,则可能需要考虑开发异常的类层次结构,可以专门捕获该异常。在这种情况下,IllegalArgumentException的子类可能是一个好主意。可以说这是更好的设计,并且您的测试可以捕获特定的异常类型。

07-24 09:32