2013-07-03 1 views
1

예외를 throw하는 메서드가 있습니다. 그리고 나는 이런 시험을 쳤다.다른 어설 션과 함께 예외 어설 션 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); 
} 

이 테스트는 예외에 대한 주장이며, 예외가 throw되므로 테스트가 통과합니다. 마지막 줄은 신경 쓰지 않아요 assertTrue(false)

다른 어설 션도 만족하는지 어떻게 확인할 수 있습니까?

답변

1

이것은이 경우에 대한 패턴입니다. 설계된대로 ExpectedException을 사용합니다. 나는 누군가가 삭제하기로 결정하면 그것이 위양성을 초래하지 않습니다 때문에 try의 방법 메서드 호출 후 실패보다는 throw e를 좋아하는 그들이 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; 
    } 
}