import org.junit.jupiter.api.Test;
public class JunitDefaultStructure {
// (1)
@Test
public void test1() {
// 테스트 하고자 하는 대상에 대한 테스트 로직 작성
}
// (2)
@Test
public void test2() {
// 테스트 하고자 하는 대상에 대한 테스트 로직 작성
}
// (3)
@Test
public void test3() {
// 테스트 하고자 하는 대상에 대한 테스트 로직 작성
}
}
검증한다
라는 의미로 생각해볼 수도 있겠다.public class HelloJUnitTest {
@DisplayName("Hello JUnit Test")
@Test
public void assertionTest() {
String expected = "Hello, JUnit";
String actual = "Hello, JUnit";
assertEquals(expected, actual);
}
}
@DisplayName
: 테스트 케이스 실행 시, 실행 결과 창에 표시되는 이름을 지정한다.
assertEquals(expected, actual)
: 기대하는 값(expected)와 실제 값(actual)을 비교하여 Equal(일치하는지) 비교한다.
위의 형태처럼 사용이 가능하며, 아래는 Assertion의 다른 메서드들이다.
assertNotNull(actual)
: Null 여부를 테스트한다.
assertThrows(expectedType, executable)
: 예외(exception)를 테스트한다.
assertTrue(boolean)
: 조건이 참인지 확인한다.
assertAll(executables...)
: 모든 확인 구문을 확인한다.
assertTimeout(duration, executable)
: 특정 시간 안에 실행이 완료되는지 확인한다.
<duration - 몇초만에 끝내야하는지>
테스트 케이스를 실행하기 전에 어떤 객체나 값에 대한 초기화 작업 등의 전처리 과정을 해야할 경우가 많다. 이 경우 JUnit에서 사용할 수 있는 애너테이션이 바로 @BeforeEach
와 @BeforeAll()
이다.
public class Test {
@BeforeEach
public void init() {
...
}
@BeforeEach
: 테스트 케이스가 각각 실행될 때 마다 실행 직전에 먼저 실행되어 초기화 작업을 진행한다.
데이터 값을 초기화하여 다른 테스트 케이스에 영향을 주지 않으면서 테스트가 가능하다.
@BeforeAll
: @BeforeEach()
와 달리 클래스 레벨에서 테스트 케이스를 한꺼번에 실행 시키면 테스트 케이스가 실행되기 전에 딱 한번만 초기화 작업을 할 수 있도록 해주는 애너테이션이다.
JUnit에서는 테스트 케이스 실행이 끝난 시점에 후처리 작업을 할 수 있는
@AfterEach
,@AfterAll
같은 애너테이션도 지원한다.이 애너테이션은
@BeforeEach
,@BeforeAll
과 동작 방식은 같고, 호출되는 시점만 반대다.
Junit 5에는 Assumption이라는 기능이 추가되었다.
Assumption은 ‘~라고 가정하고’ 라는 표현을 쓸 때의 ‘가정’에 해당한다.
JUnit 5의 Assumption 기능을 사용하면 특정 환경에만 테스트 케이스가 실행 되도록 할 수 있다.
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assumptions.assumeTrue;
public class AssumptionTest {
@DisplayName("Assumption Test")
@Test
public void assumptionTest() {
assumeTrue(System.getProperty("os.name").startsWith("Windows"));
System.out.println("execute?");
assertTrue(processOnlyWindowsTask());
}
private boolean processOnlyWindowsTask() {
return true;
}
}
assumeTrue()
메서드는 파라미터로 입력된 값이 true
이면 나머지 아래 로직들을 실행한다.
assumeTrue()
는 특정 OS 환경 등의 특정 조건에서 선택적인 테스트가 필요하다면 유용하게 사용할 수 있는 JUnit 5의 API이다.