2011-11-12 2 views
1

나는 System.out.println("something");을 넣으면 "뭔가"를 인쇄 할 것이므로 assertTrue(b_exception);의 문제인지 JUnit에 익숙하지 않습니다. 감사합니다 !!누구나이 의사 코드의 문제점을 알 수 있습니까?

로직에 중점을 둔 의사 코드임을 유의하십시오. 당신이 당신의 기대를 충족하지 못한 방법을 언급하지 않은,하지만 예외가 발생되는 테스트에 대한 올바른 관용구의 JUnit 4의 주석을 사용하는 것입니다 때문에

b_exception = false; 
try{ 
    somethingThrowError(); 
}catch(Error e){ 
    b_exception = true; 
} 
assertTrue(b_exception); 
+1

예상치 못한 점은 무엇입니까? – suat

+0

당신이 묻는 것을 이해하지 못합니다 ... psudo 코드에 문제가 있습니까? b_exception이 항상 false 인 것을 말하고 있습니까? – Matt

+2

작성한 코드를 사용하면 부울이 거짓으로 설정되고 예외를 throw하는 항목을 시도한 다음 (예 : 가정) 부울을 true로 설정하는 catch를 수행하고 마지막으로 assert 문이 true인지 확인하고 실행이 지나간다 이 블록. 너는 무엇을 기대하고 있니? –

답변

2

내가 모르는 문제는 코드와 함께 무엇인가 :

@Test(expected=SpecificError.class) 
public void testError(){ 
    somethingThrowError(); 
} 
+0

그것은 단지 의사 코드이며 내 친구는 테스트 질문과 같은 잘못된 것이 있다고 말했지만 실제로 그 조각 코드의 논리 오류를 찾을 수 없습니다. 그래서 ... 논리 관점에서 코드의 문제점을 알고 있다면 알려주십시오. 감사!! – Kevin

2

난 단지 당신이 찾고있는 것을 추측 할 수 있습니다

try{ 
    somethingThrowError(); 
    fail("Exception expected"); 
}catch(AsSpecificAsPossibleException e){ 
    //should happen, OK 
    //optionally assert exception message, etc. 
} 

는 또한 Error를 잡는 것은 나쁜 생각입니다 점에 유의

만큼 특정 예외를 사용 너는 할 수있어.

업데이트 : @Michael Borgwardt의 답변은 실제로는 더 좋지만 테스트에서 단 한 줄만 제외하면 (아무 것도 던지지 않는 경우). 또한 @Test(expected을 사용하면 추가 예외 메시지 어설 션을 수행 할 수 없습니다 (그러나해야합니까?)

+0

사실,이 코드가 깨져서 fail()이 AssertionError를 던지기 때문에 너무 나쁜 생각입니다. –

+0

@MichaelBorgwardt : 와우, 좋은 캐치, 고마워요! 나는 마지막으로'Error'를 명시 적으로 사용한 시간이 언제인지 기억이 안납니다 ... –

1

해당 코드가 잘못되었다고 생각하는 것이 확실하지 않습니다.
System.out.println처럼 항상 assertTrue이 실행됩니다.
- - 인수가 true이 아니면 오류를 알리거나 인수가 true 인 경우 "테스트 통과"를 표시합니다.
어쩌면 System.out.println("b_exception = " + b_exception);을 사용해야합니다.

관련 문제