2012-10-22 4 views
1

테스트 중심 디자인 개념을 사용하여 스택 클래스를 작성하고 있습니다. 설정() 메소드에서테스트 구동 디자인 개념을 사용하여 예외를 테스트하려면 어떻게해야합니까?

나의 스택이

Stack stack = new Stack(); 

같은 0 요소 생성이 최고 즉시 설정이 완료되면 호출 될 때 제기 될 것 StackEmptyException를 잡으려고 내 시도 테스트입니다().

@Test 
public final void testTopIsEmpty() throws StackEmptyException 
{ 
    StackEmptyException thrown = null; 
    try 
    { 
    stack.top(); 
    } 
    catch (StackEmptyException caught) 
    { 
    thrown = caught; 
    } 
    assertThat(thrown, is(instanceOf(StackEmptyException.class))); 
} 

내 마지막 문제입니다. 왜 내 코드가 작동하지 않는지 이해할 수 없다!

답변

2

의 JUnit test for an exception에 올바른 방법은 :

@Test(expected = StackEmptyException.class) 
public final void testTopIsEmpty() throws Exception 
{ 
    stack.top(); 
} 
+0

큰 테스트 (둘 이상의 명령문 사용)에서 예외가 발생했기 때문에이 테스트는 예외에 대한 테스트 방법을 싫어합니다. 내 논리로 throw/catch 블록을 사용하여 예외가 제기 된 곳을 명시 적으로 학습합니다. 다른 대답을 기다리는 동안 이해해주십시오. –

+0

Ok,'assertTrue (throw 된 instanceOf StackEmptyException.class)'를 사용하고 던져진 타입을'Exception'으로 변경하십시오. 네가 그것을 실행할 때 어떻게 될까? – Adam

+0

@DannyRancher 당신은 아마 그 큰 테스트를해서는 안됩니다. 어쩌면 특정 유스 케이스를 테스트하는 방법을 묻는 새로운 질문을 할 수 있습니다. – millimoose

3

ExpectedException는 예외가 발생되었는지를 확인하기 위해 사용될 수있다. 이 체크는 메서드의 중간에있어 이전 메서드 호출이 실수로 같은 예외를 throw하지 않도록 할 수 있습니다.

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

@Test 
public void testTopIsEmpty() throws StackEmptyException { 
    thrown.expect(StackEmptyException.class); 
    stack.top(); 
} 
+0

EE는 예외 메시지 (테스트중인 메소드가 여러 상황에서 예외를 throw 할 수있는 경우) –

+0

ExpectedException에 대한 규칙과 같은 JUnit 최신 항목에 대한 +1. 훨씬 명확한 코드가 가능합니다. –