JUnit에서 @Before
와 @BeforeClass
는 테스트 실행 전 수행해야할 초기화 메소드를 설정할 때 사용하는 annotation입니다.
이름이 비슷하기 때문에 헷갈리는데 차이점이 있습니다. 예제와 함께 차이점에 대해서 알아보겠습니다.
1. @Before : 각각의 테스트 실행 전, 실행되는 초기화 메소드
@Before
가 있는 메소드는 각각의 테스트가 실행되기 전에 한번씩 호출됩니다. 만약 클래스에 @Test
로 구현된 3개의 테스트 메소드가 있다면 @Before
로 설정된 메소드는 3번 실행됩니다. 그리고 @Before
메소드는 static이 아닌 member 메소드에만 사용할 수 있습니다.
import org.junit.Before;
import org.junit.Test;
public class TestExample {
@Before
public void initBeforeTest() {
System.out.println("Initialize something before each 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");
}
}
위 코드를 실행해보면, 아래와 같이 각각의 테스트 메소드가 실행되기 전에 @Before
로 설정된 initBeforeTest()
가 호출된 것을 확인할 수 있습니다.
Initialize something before each test
Running 'test1' method
Initialize something before each test
Running 'test2' method
Initialize something before each test
Running 'test2' method
정리하면, 각각의 테스트를 시작하기 전에 매번 초기화할 것이 있을 때 @Before
를 이용하여 초기화할 수 있습니다.
2. @BeforeClass : 클래스 안의 테스트 실행 전, 한번만 호출되는 메소드
@BeforeClass
로 설정된 메소드는 클래스에 정의된 테스트가 실행될 때, 한번 호출되는 메소드입니다. 클래스 안에 3개의 테스트 메소드가 있을 때, @BeforeClass
로 설정된 메소드가 한번 실행되고 그 다음에 3개의 테스트 메소드가 연속적으로 실행됩니다.
@Before
메소드는 static이 아닌 member 메소드에만 사용할 수 있는데, @BeforeClass
는 static method에만 사용할 수 있다는 차이점이 있습니다.
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
public class TestExample2 {
@BeforeClass
public static void initJustOnce() {
System.out.println("Initialize once");
}
@Before
public void initBeforeTest() {
System.out.println("Initialize something before 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");
}
}
위의 코드에서, 클래스에 있는 모든 테스트를 수행하면 아래와 같이 @BeforeClass
로 설정된 메소드는 테스트 전에 1회만 호출되는 것을 볼 수 있습니다.
Initialize once
Initialize something before test
Running 'test1' method
Initialize something before test
Running 'test2' method
Initialize something before test
Running 'test2' method
만약 test2만 실행하면, 아래와 같이 @BeforeClass
, @Before
로 설정된 메소드가 한번씩 실행됩니다. 두개 이상의 테스트를 동시에 실행될 때 호출되는 횟수가 다르다는 점만 기억하시면 됩니다.
Initialize once
Initialize something before test
Running 'test2' method
정리하면, 클래스의 테스트를 시작하기 전에 공통적으로 초기화할 것이 있을 때 @BeforeClass
를 이용하여 초기화할 수 있습니다.
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 가져오기