j在不同情况下使用相同的exception

我正在为一个解析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")); } 

你需要以老式的方式做到这一点:

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

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

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

如果您有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")); }