j在不同情况下使用相同的异常

时间:2010-03-14 22:29:07

标签: java unit-testing junit

我正在为一个解析String的构造函数编写一个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"));
}

2 个答案:

答案 0 :(得分:34)

如果您有 JUnit 4.7 或更高版本,则可以使用此(优雅)方式:

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

@Test
public void testRodneCisloRok(){
    exception.expect(IllegalArgumentException.class);
    exception.expectMessage("error1");
    new RodneCislo("891415",dopocitej("891415"));
}

答案 1 :(得分:4)

你需要用老式的方式来做:

@Test
public void testRodneCisloRok() {
    try {
       new RodneCislo("891415",dopocitej("891415"));
       fail("expected an exception");
    } catch (IllegalArgumentException ex) {
       assertEquals("error1", ex.getMessage());
    }
}

@Test(expected=...)语法很方便,但在很多情况下它太简单了。

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