2013-07-03 80 views
1

我有一個拋出異常的方法。我有這樣的測試。異常斷言連同其他斷言jUnit

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

@Test 
public void shouldThrowExceptionIfValidationFails() throws Exception { 
    doThrow(new InvalidException("Invalid Token")).when(obj).foo(any()); 

    expectedEx.expect(InvalidException.class); 
    expectedEx.expectMessage("Invalid Token"); 

    // my method call 

    // verify DB save doesn't happens 

    assertTrue(false); 
} 

該測試斷言異常,並且由於引發異常測試通過。它不關心最後一行assertTrue(false)

我怎樣才能確保我的其他說法也感到滿意。

回答

1

這是我遵循這種情況下的模式。它按照設計使用ExpectedException。我喜歡throw e,而不是在try中的方法方法調用之後失敗,因爲如果有人決定刪除fail(當人們看到fail()或者測試失敗時傾向於這樣做,它不會導致誤報它擊中fail())。

@Test 
public void shouldThrowExceptionIfValidationFails() throws Exception { 
    doThrow(new InvalidException("Invalid Token")).when(obj).foo(any()); 

    expectedEx.expect(InvalidException.class); 
    expectedEx.expectMessage("Invalid Token"); 

    try{ 
    // my method call 
    }catch(InvalidException e){ 
    // verify DB save doesn't happens 

    assertTrue(false); 

    throw e; 
    } 
}