JUnit에서 @After
와 @AfterClass
는 테스트 실행 후 정리하거나 이전 설정으로 되돌리는 작업을 수행하는 메소드를 설정하는 annotation입니다.
예를 들어 어떤 메소드에 @After
를 붙이면, 테스트가 종료될 때마다 저 메소드가 실행되어 정리하는 작업을 수행하도록 구현할 수 있습니다.
이 두개의 Annotation은 비슷한 동작을 하지만, 호출되는 횟수 및 타이밍이 다릅니다.
예제와 함께 차이점에 대해서 알아보겠습니다.
1. @After : 각각의 테스트 실행 후, 매번 호출되는 메소드
메소드에 @After
를 붙이면 각각의 테스트가 끝난 후에 한번씩 호출됩니다. 만약 클래스에 @Test
로 구현된 3개의 테스트 메소드가 있다면 @After
로 설정된 메소드는 3번 실행됩니다. 그리고 @After
메소드는 static이 아닌 member 메소드에만 설정할 수 있습니다.
import org.junit.After;
import org.junit.Test;
public class AfterExample1 {
@After
public void tearDownAfterTest() {
System.out.println("Tear down something after test");
}
@Test
public void test1() {
System.out.println("Running 'test1' method");
}
@Test
public void test2() {
System.out.println("Running 'test2' method");
}
@Test
public void test3() {
System.out.println("Running 'test2' method");
}
}
위 코드를 실행해보면, 아래와 같이 각각의 테스트 메소드가 완료된 후에 @After
로 설정된 tearDownAfterTest()
가 호출된 것을 확인할 수 있습니다.
Running 'test1' method
Tear down something after test
Running 'test2' method
Tear down something after test
Running 'test2' method
Tear down something after test
정리하면, 각각의 테스트가 끝났을 때 항상 정리해야하는 것이 있을 때 @After
를 이용하여 정리해줄 수 있습니다.
2. @AfterClass : 클래스 안의 모든 테스트 완료 후, 한번만 호출되는 메소드
@AfterClass
로 설정된 메소드는 클래스에 정의된 테스트가 실행될 때, 한번 호출되는 메소드입니다. 클래스 안에 3개의 테스트 메소드가 있을 때, 3개의 테스트 메소드가 모두 호출되고 완료되었을 때 @AfterClass
로 설정된 메소드가 한번 실행됩니다.
@After
메소드는 static이 아닌 member 메소드에만 사용할 수 있는데, @AfterClass
는 static method에만 사용할 수 있다는 차이점이 있습니다.
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Test;
public class AfterExample2 {
@AfterClass
public static void tearDownOnce() {
System.out.println("tear down something after all test done");
}
@After
public void tearDownAfterTest() {
System.out.println("Tear down something after test");
}
@Test
public void test1() {
System.out.println("Running 'test1' method");
}
@Test
public void test2() {
System.out.println("Running 'test2' method");
}
@Test
public void test3() {
System.out.println("Running 'test2' method");
}
}
위의 코드에서, 클래스에 있는 모든 테스트를 수행하면 아래와 같이 @AfterClass
로 설정된 메소드는 클래스의 모든 테스트가 완료된 후에 1회만 호출되는 것을 볼 수 있습니다. 반면에 @After
는 각각의 테스트가 끝날 때마다 호출되고 있습니다.
Running 'test1' method
Tear down something after test
Running 'test2' method
Tear down something after test
Running 'test2' method
Tear down something after test
tear down something after all test done
정리하면, 클래스의 모든 테스트가 끝났을 때 정리해야하는 것이 있다면 @AfterClass
를 이용하여 정리해줄 수 있습니다.
Related Posts
- Java - hashCode(), 사용하는 이유? 구현 방법?
- Java8의 Stream reduce() 사용 방법 및 예제
- Java - filter, map, flatMap 사용 방법 및 예제
- Java - 2개의 Map 합치기 (merge, putAll)
- Java - ConcurrentModificationException 원인 및 해결 방법
- JUnit - @After와 @AfterClass의 차이점
- JUnit - @Before와 @BeforeClass의 차이점
- java와 javac의 차이점
- Java - 자바(JDK) 버전 확인 방법 (터미널, cmd 명령어)
- Java - java.util.Date를 java.sql.Date로 변환
- Java - 시스템 운영체제(OS) 정보 확인
- Java - 코드 실행 시간 측정
- Java - HashSet.retainAll() 사용 방법 및 예제
- Java - ArrayList.retainAll() 사용 방법 및 예제
- Java - ArrayList를 String으로 변환
- Java - float을 int로 변환
- Java - float을 String으로 변환
- Java - String을 boolean으로 변환
- Java - XML을 JSON으로 변환
- Java - ClassNotFoundException 발생 원인 및 해결 방법
- Java - private 생성자를 사용하는 이유
- Java - non-static method cannot be referenced from a static context
- Java - NoSuchMethodError 원인 및 해결 방법
- Java - Object를 byte[]로 변환
- Java - AbstractMethodError 원인 및 해결
- NoClassDefFoundError: com/fasterxml/jackson/databind/ObjectMapper 에러
- Java - HttpClient에 Timeout 적용
- IntelliJ에서 Java 실행 파일 배포 (Export Runnable JAR)
- Java - JAR 디컴파일 방법 (JD-GUI, JD-CLI)
- Java - 키보드, 마우스 이벤트 받기 (이벤트 후킹)
- Java에서 윈도우 cmd 명령어 실행 및 결과 출력
- Java - Selenium 드라이버 자동 설치 방법
- Java - JSON 라이브러리 사용 방법 (JSONObject, JSONArray)
- Java - ZIP 압축, 압축 해제 (zip, unzip)
- Java - byte[] 배열을 File에 저장