Test LifeCycle Method
각 assert Method를 보기 전에 필수로 알아야 하는 내용을 보자. LifeCycle Method들은 Junit5의 Annotation을 기반으로 작동하며 각 테스트 이전과 이후, 혹은 전체 테스트 이전과 이후에 실행하여 테스트에 필요하거나 필요가 없어진 데이터들을 세팅하고 제거하는 역할을 한다.
@BeforeEach
- 각 테스트 이전에 실행된다. 일반적인 설정 코드에 유리하다. 객체를 생성하고 테스트 데이터를 설정하는 것에 사용된다.
@AfterEach
- 각 테스트 이후에 실행된다. 리소스 해제와 테스트 데이터 정리와 같은 용도로 사용된다.
- 데이터베이스 커넥션을 유지하고 해제하는 방식과 같은 일회성 작업에는 적절하지 못하다. 해당 작업들에는 아래와 같은 어노테이션들이 사용될 수 있다.
@BeforeAll
@AfterAll
BeforeAll과 AfterAll 어노테이션이 사용된 작업들은 정적으로 선언되어야 한다. Why?
- Junit의 동작 방식과 관련이 있다. Junit을 이용한 테스트 클래스에서는 인스턴스를 생성하지 않고 테스트 메서드를 실행할 때마다 새로운 인스턴스를 생성하게 된다. 따라서 두 어노테이션이 지정된 메서드는 클래스 단위의 라이프사이클과 관련된 작업을 수행해야 한다. 이런 라이프 사이클이 각 작업에서의 인스턴스와는 독립적으로 실행되어야 하기 때문에 static으로 선언되어야 한다.
- static으로 선언된 메서드는 클래스 수준에서 실행되고, 테스트 클래스의 인스턴스와 별개로 동작한다. 즉 모든 테스트 메서드가 실행되기 전, 실행된 후 한 번 호출되고 클래스 수준에서의 필요한 초기화 작업이나 리소스 해제와 같은 정리 작업을 수행할 수 있다. → 테스트 클래스의 인스턴스와 독립적으로 동작함을 보장할 수 있다.
- static 키워드를 사용하지 않고도 해당 어노테이션이 부착된 LifeCycle Method를 작성하는 방법이 존재하는 데, 이는
@TestInstance(Lifecycle)
를 클래스에 부착해서 각 테스트에 대한 인스턴스가 개별로 생성되지 않도록 보장하는 것이다. 특정 테스트에 대해서는 해당 방법이 유효할 수 있다.
글 잘 봤습니다, 감사합니다.