2013-09-22 1 views
0

jUnit을 처음 사용했습니다. 처리 된 예외를 테스트하는 방법을 알아낼 수 없습니다.jUnit을 사용하여 이미 처리 된 예외를 테스트하는 방법?

이제 잘못된 파일 경로로 테스트하여 예외가 발생하여 제대로 캐치되었는지 확인하십시오. 나는 이것을 썼다

@Test (expected = java.io.FileNotFoundException.class) 
public void Input_CheckOnInvalidPath_ExceptionThrown() { 
    Driver driver = new Driver(); 
    String filePath = "wrong path"; 
    File file = driver.inputProcessor(filePath); 
     } 

그러나 내가 벌써 잡았던 것에 따라 나는 그 예외를 잡았다. 테스트가 실패했습니다. 어떤 도움이 될 것입니다! thnx

+1

자극 한 경우에도 예외가 throw되지 않으면 올바르게 캐치되었습니다. 뭐가 문제 야? –

+2

처음에이 메서드가 표시하지 않는 동작을 테스트하는 이유는 무엇입니까? – rocketboy

+0

제안 된 솔루션 [여기] (http://stackoverflow.com/questions/17955899/test-handled-exceptions-junit) 및 [여기] (http://stackoverflow.com/questions/12184281/how- to-handle-except-unit-testing-using-junit) –

답변

3

구현 세부 사항이 아닌 메소드 동작을 테스트해야합니다.

당신의 방법의 올바른 동작이 파일이 존재하지 않을 때 null를 반환하는 경우 방법의 올바른 동작이 때 파일 System.out에 특정 메시지를 인쇄 할 경우, 당신은 단지

@Test 
public void Input_CheckOnInvalidPath_ExceptionThrown() { 
    Driver driver = new Driver(); 
    String filePath = "wrong path"; 
    assertNull(driver.inputProcessor(filePath)); 
    } 

필요 존재하지 않으며 테스트하려는 경우 모크 PrintStream을 만들고 System.setOut(PrintStream)을 사용하여 설정하고 메서드를 호출 한 다음 PrintStream이 올바르게 호출되었는지 테스트합니다. 모키토 (Mockito)는 그렇게 할 수 있습니다 - 아마도. 나는 System.out.println() 대 많은 System.out.print()이 실행되는 구현 세부 사항을 테스트 할 위험이 있다고 생각합니다. (e.printStackTrace()이 구현 된 방법을 테스트하지 않아야합니다.)

올바른 동작이 둘 다 있다면 두 가지 검사가 모두 필요합니다.

+0

Jeremy에게 명확하고 간결한 대답을 해주셔서 감사합니다. "구현 세부 사항이 아니라 메소드 동작을 테스트해야합니다."- 나는 결코이 개념을 생각하지 않습니다. – jillionbug2fix

+0

필자는 위의 내 의견에 똑같이 말했다 : "테스트는 구현 세부 사항이 아닌 노출 된 동작을 테스트해야합니다." –

+0

네, 그랬습니까! 고맙습니다. 내가 방금 단위 테스트의 전체 아이디어를 파악하기 시작했다고 말했듯이, 미리보기로 이해하기 쉽습니다! – jillionbug2fix

1

이 메서드에서 노출 된 동작은 적절한 줄 모양이 System.outSystem.err 인 것입니다. 테스트 코드에서 System.out 및 System.err을 자신의 PrintStream으로 바꿀 수 있습니다. System.setOutSystem.setErr을 참조하십시오.

각 인쇄 스트림을 예를 들어. StringWriter 그렇게하면 테스트 코드에서 메서드가 각 출력 스트림에 쓴 내용을 나타내는 String을 가져 와서 테스트 할 수 있습니다.

관련 문제