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 - Unsupported class file major version 61 에러
- Java - String.matches()로 문자열 패턴 확인 및 다양한 예제 소개
- Java - 문자열 공백제거 (trim, replace)
- Java - replace()와 replaceAll()의 차이점
- Java - ArrayList 초기화, 4가지 방법
- Java - 배열 정렬(Sorting) (오름차순, 내림차순)
- Java - 문자열(String)을 비교하는 방법 (==, equals, compare)
- Java - StringBuilder 사용 방법, 예제
- Java - 로그 출력, 파일 저장 방법 (Logger 라이브러리)
- Java IllegalArgumentException 의미, 발생 이유
- Java - NullPointerException 원인, 해결 방법
- Seleninum의 ConnectionFailedException: Unable to establish websocket connection 해결
- Java - compareTo(), 객체 크기 비교
- Java - BufferedWriter로 파일 쓰기
- Java - BufferedReader로 파일 읽기
- Java charAt() 함수 알아보기
- Java - BigInteger 범위, 비교, 연산, 형변환
- Java contains()로 문자(대소문자 X) 포함 확인
- Java - Set(HashSet)를 배열로 변환
- Java - 문자열 첫번째 문자, 마지막 문자 확인
- Java - 문자열 한글자씩 자르기
- Java - 문자열 단어 개수 가져오기
- Java - 1초마다 반복 실행
- Java - 배열을 Set(HashSet)로 변환
- Java - 여러 Set(HashSet) 합치기
- Java - 명령행 인자 입력 받기
- Java - 리스트 역순으로 순회, 3가지 방법
- Java - 특정 조건으로 리스트 필터링, 3가지 방법
- Java - HashMap 모든 요소들의 합계, 평균 계산
- Java - 특정 조건으로 HashMap 필터링
- Java - 싱글톤(Singleton) 패턴 구현
- Java - 숫자 왼쪽에 0으로 채우기
- Java - String 배열 초기화 방법
- Java - 정렬된 순서로 Map(HashMap) 순회
- Java - HashMap에서 key, value 가져오기