@AfterEach는 언제 사용하는가?
@AfterEach를 사용하면, 각 테스트 이후 실행되어야 하는 작업을 설정할 수 있다. 예를 들어 영속적인 데이터들이 초기화 되어야 하는 경우 사용될 수 있으며, 대표적으로 테스트 시 사용하는 데이터 베이스를 테스트 하는 경우 인메모리 데이터베이스를 사용하게 되는데, 이런 데이터 베이스를 초기화 할 때 사용할 수 있다.
@AfterEach 사용 예시
예를 들어 다음과 같이 MyDatabase라는 이름의 RoomDataBase가 있고, 테스트에 MyDatabase를 사용한다면, 마지막에 꼭 close를 실행해줘야 테스트 시 리소스를 정리할 수 있다. 이때, 다음과 같이 @AfterEach를 사용해 myDatabase를 close 해줌으로써 각 테스트 이후 데이터 베이스의 리소스를 정리하는 것이 가능하다.
public class MyDatabaseTest {
private MyDatabase myDatabase;
private MyDao myDao;
@Before
public void setUp() {
Context context = ApplicationProvider.getApplicationContext();
myDatabase = Room.inMemoryDatabaseBuilder(context, MyDatabase.class).build();
myDao = myDatabase.myDao();
}
@Test
public void testInsertData() {
// 데이터베이스에 데이터 삽입 테스트
// myDao를 사용하여 데이터베이스 작업을 수행
}
@Test
public void testQueryData() {
// 데이터베이스 데이터 조회 테스트
// myDao를 사용하여 데이터베이스 작업을 수행
}
@After
public void tearDown() {
// 테스트 메서드 실행 후에 데이터베이스 연결 닫기 및 리소스 해제
myDatabase.close();
}
}
정리
이 외에도 테스트 이후에 로깅이 필요하거나, 테스트 이후에 초기화되어야 하는 상태가 있는 경우 @AfterEach 를 사용할 수 있다. 하지만, 테스트 대상 클래스의 인스턴스를 초기화 하는 것을 @AfterEach에서는 실행하지는 말자. 테스트의 가독성 측면에서 AfterEach에서는 테스트를 정리하는 작업만을 실행하는 것이 좋다.
반응형