2014-04-29 173 views
0

我有這樣的單元測試,使整個測試失敗的原因是拋出的異常,雖然其expected的:測試失敗,因爲拋出異常

@Test(expected = AutoGenerateStringIdException.class) 
public void testPut_shouldThrowException(){ 
    RootEntity rootObject = new RootEntity(); 
    // Some codes here 
    try { 
     Key key = store.put(rootObject); 
    } catch(AutoGenerateStringIdException e){ 
     assertEquals(e.getMessage(), "Cannot auto-generate String @Id"); 
    } 
} 
+0

我認爲,AutoGenerateStringIdException異常永遠不會從此測試中拋出,這就是爲什麼它失敗。 (因爲異常被捕獲) –

回答

0

如果異常在測試預期,你不應該趕上它。只要刪除try/catch並觀察,會發生什麼。

+0

測試失敗也 – xybrek

3

您可以使用@Test(expected = SomeException.class)或使用try...catch。你不能同時使用它們兩個。

當你聲明一個測試期望拋出一個特定的異常,並且如果你在測試中捕獲它,它不會被拋出,是不是?

雖然我還沒有嘗試過,但可以嘗試重新從catch塊中拋出異常。

catch(AutoGenerateStringIdException e){ 
    assertEquals(e.getMessage(), "Cannot auto-generate String @Id"); 
    throw e; 
} 
+0

是的,重新拋出異常工作正常。 – jgitter

+0

我確實刪除了try-catch,但我得到了測試失敗 – xybrek