jUnit4 의 Suite 기능 사용시 suite 내에서 한번만 호출되는 BeforeClass 만들기
개요
jUnit 의 Suite Class 기능을 이용하여 여러개의 테스트 클래스를 만들때 Suite 내에서 한번만 호출되는 클래스를 만들어야 하는 경우가 있다.
Before annotation 은 class 에서만 한번 호출되는 것이므로 적당하지 않다.
해결
Suite 로 설정한 class 에 BeforeClass 를 만들어 준다.
AllTests.java
import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.runner.RunWith; import org.junit.runners.Suite; import org.junit.runners.Suite.SuiteClasses; @RunWith(Suite.class) @SuiteClasses({ testClass1.class, testClass2.class }) public class AllTests { @BeforeClass public static void globalBeforeClass() { System.err.println("globalBeforeClass"); } @AfterClass public static void globalAfterClass() { System.err.println("globalAfterClass"); } }
maven-surefire-plugin 과 연계
surefire-plugin 을 사용할 경우 Suite class 를 제일 먼저 실행하지 않으므로 위의 BeforeClass 가 호출되지 않는다.
다음과 같이 surefire-plugin 설정을 수정해야 한다.
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.16</version> <configuration> <skipTests>false</skipTests> <includes> <include>**/AllTests.class</include> </includes> </configuration> </plugin> </plugins> </build>