2013-11-22 2 views
2

응용 프로그램이 thatMethod()에서 2 가지 예외를 던지고 있습니다. JUnit이 테스트 해보고 싶습니다.JUnit에서 여러 개의 예상 예외가 발생했습니다.

내가 ExpectedException 및 사용할 수 있습니다 @Rule 제외하고 응용 프로그램을 던질 것으로 예상된다 "자연"예외를 설정합니다. How do you assert that a certain exception is thrown in JUnit 4 tests?에 대한 설명입니다.

내 경우에는 어떻게 할 수 있습니까? 2 개 이상 "natural"예외가 있습니까? ExpectedException에 여러 개의 예상 예외가 없습니다.

다른 방법으로 How do you assert that a certain exception is thrown in JUnit 4 tests?에서 설명한대로 다시 할 수 있습니다. JUnit의 기본 제공 기능을 사용하여이 작업을 수행 할 수있는 방법이 있는지 궁금합니다.

+0

당신은 악용을 시도 할 다음 하나의 공통 _parent_ 예외 유형을 설정하고 수 [매개 변수화 JUnit 테스트 (https://github.com/junit-team/junit/wiki/Parameterized-tests). 이 방법은 한 가지 방법을 테스트하는 경우에만 적용됩니다 (실제로 그런 경우가 있어야 함). 이상적이긴하지만 여전히 작동 할 수 있습니다. 메소드 매개 변수의 여러 조합에 대해 별도의 테스트를 설정할 필요없이 throw되는 동일한 예외를 테스트하는 데 사용하고 있습니다. – Campa

답변

1

ErrorCollector으로 여러 예외를 수집하고 테스트가 끝나면이를 확인할 수 있습니다. 그러나 JUnit은 테스트 메소드 만보고 메소드 실행 중에는 아무 것도 수행 할 수 없으므로 콜렉터에 예외를 수동으로 추가해야합니다.

+0

ErrorCollector는 테스트 케이스가 던지는 여러 AssertionErrors를 겹쳐 쌓습니다. JUnit이 애플리케이션이 던질 수있는 여러 개의 예상 오류를 식별하여 테스트 중에 무시할 수있게하려고합니다. – Roam

+2

그건 불가능합니다. –

3

단일 테스트 방법은 한 번만 종료 할 수 있으므로 단 하나의 예외 만 throw 할 수 있습니다. 코드가 두 가지 다른 방법으로 실패 할 수 있다는 것을 확인하려면 두 가지 별도의 테스트가 있습니다. 두 가지 테스트 메소드로 나누고 각각에 대해 특정 예외를 선언하십시오.

+0

여러 예상 예외를 따로 설정하려고합니다. 테스트가 발생하면 종료되지 않습니다. – Roam

+1

단일 테스트에서 * 정말로 * 필요하다면 [이 질문] (http://stackoverflow.com/questions/)에서와 같이 명백한'try' /'fail' /'catch' 블록을 사용해야 할 것입니다. 3083161/junit-exception-testing)을 참조하십시오. 그 질문에 대해 득표가 많은 대답을하면 별도의 테스트로 나뉘어집니다. 그것은 여전히 ​​나의 권고 일 것입니다. – Joe

1

JUnit 함수가 하나의 예외 만 허용하기 때문에이 방법을 발견했습니다.

@Test 
public void checkRuleValidation() { 
    Rule rule = generateRules(1, "rule.json").get(0); 
    // rule name validation 
    rule.setRuleName(null); 
    try { 
     ruleResource.saveRule(rule); 
     // expecting exception if no assert false 
     assertTrue(false); 
    } catch (BadRequestException br) { 
     assertTrue(true); 
    } 

    //validating rule action 
    rule.setRuleAction(null); 
    try { 
     ruleResource.saveRule(rule); 
     // expecting exception if no assert false 
     assertTrue(false); 
    } catch (AuthorizationException br) { 
     assertTrue(true); 
    } 
}