2011-10-28 4 views
2

@Before 메서드가 현재 실행중인 테스트 주석을 알고 있으므로 @Before 메서드가 다양한 작업을 수행 할 수있게하고 싶습니다. 나는 하나 개의 솔루션에 대한 @Rule을 사용하는 것 같아요Junit4에서 @Test 주석을 기반으로 @Before 동작을 변경하는 방법

@Before 
void setUp() { 
    if (testMethod.hasAnnotation(@NeedsDatabase)) { 
     reloadDatabase(); 
    } 
} 

을 : 특히, 지금 우리의 @Before가 항상 데이터베이스를 다시로드 같은 다양한 초기화 단계를 수행, 등 나는 다음과 같은 코드를 작성할 수 있도록하고 싶습니다 DB 초기화는 구현하기가 복잡하고 기존 인프라가 이미 @setUp에서 처리합니다. 우리는 이미 커스텀 러너 (Runner)를 가지고 있으며 모든 테스트가 공유베이스 클래스를 확장합니다.

나는 이것을 수행하는 방법을 생각해 보았지만, JUnit4에서 사용할 수있는 것이 무엇인지 알지 못합니다.

+1

을 시작. 나는 그것을 간단하게 유지할 것이다. "데이터베이스가 필요한"테스트에서 특별한 setupDB 메소드를 호출하기 만하면된다. 그러면 테스트를 실행하는 외부 프레임 워크와 독립적으로 테스트가 수행됩니다. 일반적으로 단위 테스트 DRY 전략은 너무 많은 가치를 추가하지 않습니다. – jayunit100

답변

2

@RunWith annotion을 사용하고 @NeedsDatabase 주석을 검색하여 적절하게 설정하는 ParentRunner을 직접 만들 수 있습니다.

1

TestWatcher에 사용 @Rule 및 구현 당신의 필요를 모방하고 불필요하게 코드에 너무 많은 간접를 추가하지 않는이 작업을 수행하는 방법이있다()

http://kentbeck.github.com/junit/javadoc/latest/org/junit/rules/TestWatcher.html#starting%28org.junit.runner.Description%29

+0

starting()은 @Before 앞이나 뒤에 실행됩니까? @Before에서 동작을 옮길 수는 없지만, start()에서 Annotation [] 목록을 잡고 클래스 로컬 멤버 변수에 저장하면 작동 할 수 있습니다. – JBCP

관련 문제