생애 첫 Spring 프로젝트! 그리고 JUnit!
JUnit으로 단위 테스트를 작성하는데 @BeforeAll 어노테이션이 static 함수에만 적용이 된다. 인스턴스 함수에 적용해서 테스트 케이스에 해당하는 액션이 아닌 공통된 준비 단계들, 예를 들면 TCP 서버와 연결을 수행해 둔다든지 하는 행위를 하고 싶은데 안된다.
찾아보니 JUnit에 LifeCycle 이라는 개념이 존재해서, 기본으로 PER_METHOD 로 설정되어 있고, 인스턴스 함수에 @BeforeAll을 적용하고 싶으면 PER_CLASS 설정으로 바꾸어 주어야 함을 알게 되었다. 이름만 딱! 봐도 왜 @BeforeAll이 인스턴스 함수에 적용이 안되었고, PER_CLASS 설정으로 바꾸어야 되는지 이해가 한 번에 간다.
상세한 해결책은 아래 사이트들에서 너무나 잘 설명해 주고 있다.
나는 클래스 선언에 '@TestInstance(TestInstance.Lifecycle.PER_CLASS)' Annotation을 적용해주었다.
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
@DisplayName("연결")
public class ConnectTest {
private TcpServer server;
@BeforeAll
void contextLoad() {
try {
server = new TcpServer(ServerAddress.getPort());
server.start();
} catch (Exception e) {
e.printStackTrace();
}
}
}