2015-01-09 11 views
-1

:JUnit의 ExpectedException으로 인해 예측할 수없는 상태가 발생하지 않는 이유는 무엇입니까? <a href="http://junit.org/javadoc/latest/org/junit/rules/ExpectedException.html" rel="nofollow">documentation</a>에서

public class SimpleExpectedExceptionTest { 
    @Rule 
    public ExpectedException thrown= ExpectedException.none(); 

    @Test 
    public void throwsNothing() { 
     // no exception expected, none thrown: passes. 
    } 

    @Test 
    public void throwsExceptionWithSpecificType() { 
     thrown.expect(NullPointerException.class); 
     throw new NullPointerException(); 
    } 
} 

유효합니다. 그러나 테스트가 다른 순서로 실행되면 어떻게 될까요? @Rule 주석은 JUnit에게 각 테스트 후에 상태를 재설정하도록 지시합니까?

답변

2

예, 실행되는 모든 단일 테스트에 대해 규칙이 재설정됩니다. 의 JUnit에 대한 주요 사항의

하나는 테스트

+0

하나의 테스트가 다른 변수와 같은 전역 변수 (시스템 플래그와 같은)를 설정하여 순서 연결을 생성 할 수 있습니다. 나는 그것이 ExpectedException과 함께 일어나지 않는 이유를 모른다. – djechlin

+1

@AAA JUnit은 테스트 사례를 설정하는 방법을 문서화합니다. 개발자가 다른 방식으로 작업을 수행하면 문제가 발생합니다. 결국, 당신은 도구를 사용하고 있습니다. 의도 한대로 사용하십시오. 그렇지 않으면 아무 것도 기대할 수 없습니다. –

+0

@SotiriosDelimanolis 좋습니다, 그래서 ExpectedException을 어떻게 사용해야합니까? – djechlin

2

JUnit 테스트가 단독으로 실행되는 순서에 따라 결코 의존하고 있다는 점이다. 각 개별 테스트에 대해 (기본) 테스트 러너는 테스트 클래스의 새 인스턴스를 만들고 단일 테스트 메서드 (및 @Before@After 메서드) 만 호출합니다. 따라서 순서에 의해 영향을받는 정적 (또는 외부) 종속성을 생성하지 않으면 테스트 실행 순서가 결과에 아무런 영향을 미치지 않습니다.

+0

이것은 testng 일이었을 수도 있지만 @BeforeSuite 또는 이와 동등한 것은 무엇입니까? 하나의 클래스에서 여러 테스트를 실행하는 경우에만 해당됩니다. – djechlin

+0

나는이 진술이 정확하다고 생각하지 않는다. 나는 그것이 단위 테스트가 어떻게 실행되는지에 달려 있다고 생각합니다. '@ Before'에서 재설정되지 않은 필드가 변경되어 테스트가 실패한 여러 사례를 보았습니다. 어설 션이 정확하다면, 생성자에서이 작업을 수행 할 수 있으므로'@ Before '를 사용할 이유가 없습니다. –

+0

@ JohnB github에서 junit의 출처를 확인할 수 있습니다. 각 테스트는 새로운 인스턴스입니다. '@ Before'와 같은 것은 단순성과 가독성을위한 것입니다. 그리고 이론적으로 테스트 러너 구현은 테스트 격리의 이유 때문에 모든 테스트에 대해 단일 인스턴스를 사용할 수 있습니다. 이는 일반적으로 나쁜 아이디어입니다. –