JUnittesting例外

我真的是新来的Java。

我在构造函数上运行一些JUnittesting。 构造函数是这样的,如果给它的一个参数赋予一个null或者一个空string,它应该会抛出一个exception。

当我在JUnit中使用null或空string参数testing这个构造函数时,我得到了一个红色的条,即使我几乎100%确定构造函数方法确实会抛出一个exception,当这样的parameter passing给它。

如果方法抛出一个exception的方式应该不应该在JUnit中有一个绿色的酒吧? 还是说,当抛出exception的时候,你应该得到一个红色的酒吧吧?

@Test(expected = Exception.class) 

告诉Junitexception是预期的结果,所以当抛出exception时,testing将被传递(标记为绿色)。

对于

 @Test 

如果抛出exception,Junit将认为testing失败。
这个链接可能有帮助。

你确定你告诉它预期的例外吗?

对于更新的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")); } 

和更旧的junit,这个:

 @Test(expected = ArithmeticException.class) public void divisionWithException() { int i = 1/0; } 

使用ExpectedException Rule(版本4.7)的冒险是您可以testingexception消息,而不仅仅是预期的exception。

使用匹配器,你可以testing你感兴趣的部分消息:

 exception.expectMessage(containsString("income: -1000.0")); 

如果你的构造函数类似于这个:

 public Example(String example) { if (example == null) { throw new NullPointerException(); } //do fun things with valid example here } 

然后,当你运行这个JUnittesting,你会得到一个绿色的酒吧:

 @Test(expected = NullPointerException.class) public void constructorShouldThrowNullPointerException() { Example example = new Example(null); } 

虽然@Test(expected = MyException.class)和ExpectedException规则是非常好的select,但有些情况下JUnit3风格的exception捕获仍然是最好的方法:

 @Test public void yourTest() { try { systemUnderTest.doStuff(); fail("MyException expected."); } catch (MyException expected) { // Though the ExpectedException rule lets you write matchers about // exceptions, it is sometimes useful to inspect the object directly. assertEquals(1301, expected.getMyErrorCode()); } // In both @Test(expected=...) and ExpectedException code, the // exception-throwing line will be the last executed line, because Java will // still traverse the call stack until it reaches a try block--which will be // inside the JUnit framework in those cases. The only way to prevent this // behavior is to use your own try block. // This is especially useful to test the state of the system after the // exception is caught. assertTrue(systemUnderTest.isInErrorState()); } 

另一个声称在这里帮助的图书馆是个例外 ; 不过,截至2014年5月,该项目似乎处于维护模式(被Java 8废弃),很像Mockito catch-exception只能操作非final方法。