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>

 

See Also

Ref