JUnit
- JUnit4 로 작성된 테스트코드가 5에서 안돌아가면 이상할 것이다. 그래서 vintage-engine 을 만들어 JUnit4 로 작성한 코드를 돌릴 수 있다.
- jupiter-api : JUnit5 로 작성할 수 있는 테스트들의 API 가 들어 있다.
- jupiter-engine : jupiter 기반으로 작성된 테스트 케이스를 JUnit Platform 에서 실행시키기 위한 테스트 엔진
- JUnit Platform : JVM 테스팅 프레임워크를 실행시키기 위한 기반 모듈. 테스트를 발견하고 테스트 계획을 생성하는 인터페이스를 정의하고 있다. 그 구현체가 engine 들 이다.
의존설정
- 자세한 의존설정 방법은 인터넷에 많이 나와 있으니 생략
- 모듈들을 불러오기 위해 의존설정을 해줘야 한다.
- Springboot 프로젝트를 생성할 때, spring-boot-starter-test 의존성에는 JUnit5 를 포함해서 AssertJ, Mockito, Hamcrest 등 테스트 모듈이 포함되어 있기 때문에 JUnit5 를 사용 가능하다.
각 의존성의 아티펙트 아이디에 대한 정보는
awayday.github.io/2017-10-29/junit5-02/
이분이 정말 정리를 잘 해 놓으신 것 같다. 읽어보면 좋다.
어노테이션
어노테이션 | 설명 | JUnit 4 와 대응 |
@Test | 해당 메서드가 테스트 메서드임을 표현. JUnit4와 달리 인자를 필요로 하지 않는다. 다음부터 나올 자체적인 어노테이션이 존재하기 떄문이다. |
|
@ParameterizedTest | 해당 메서드가 인자를 제공받는 테스트 메서드임을 나타낸다. | |
@RepeatedTest | 해당 메서드가 반복 테스트를 위한 템플릿임을 나타낸다. | |
@TestFactory | 해당 메서드가 동적 테스트수행을 위한 팩토리임을 나타낸다. | |
@TestInstance | 테스트 클래스의 생명주기 를 설정하기 위해 사용한다. | |
@DisplayName | 클래스나 메서드에 붙인다. 보여질 이름을 설정할 수 있다. | |
@BeforeEach | 현재 클래스에 속한 모든 테스트 메서드의 테스트 시행 전마다 해당 메서드를 실행. | @Before |
@AfterEach | 현재 클래스에 속한 모든 테스트 메서드의 테스트 시행 후마다 해당 메서드를 실행. | @After |
@BeforeAll | 현재 클래스의 어떤 메서드도 실행하지 않은 상태에서 해당 메서드를 실행. 클래스 단위 생명주기가 설정되지 않았다면 정적 메서드여야 한다. | @BeforeClass |
@AfterAll | 현재 클래스의 모든 메서드를 실행한 후 해당 메서드를 실행. 클래스 단위 생명주기가 설정되지 않았다면 정적 메서드여야 한다. | @AfterClass |
@Nested | 해당 클래스가 다른 클래스 내부에 선언되어 있으며, 정적 클래스가 아님을 뜻함. | |
@Tag | 클래스나 메서드에 사용할 태그를 지정하기 위한 어노테이션 | |
@Disabled | 이 테스트를 사용하지 않음을 나타냄 | @Ignore |
@ExtendWith | 테스트를 확장하기 위해 사용 |
Assertion
assertTrue(boolean condition) { /* compiled code */ }
assertTrue(boolean condition, java.util.function.Supplier<java.lang.String> messageSupplier) { /* compiled code */ }
assertTrue(java.util.function.BooleanSupplier booleanSupplier) { /* compiled code */ }
assertTrue(java.util.function.BooleanSupplier booleanSupplier, java.lang.String message) { /* compiled code */ }
assertTrue(boolean condition, java.lang.String message) { /* compiled code */ }
assertTrue(java.util.function.BooleanSupplier booleanSupplier, java.util.function.Supplier<java.lang.String> messageSupplier) { /* compiled code */ }
외에도 수많은 오버로딩 함수들이 있다.
@DisplayName("람다테스트")
@Test
public void test() {
int sum = Arrays.asList(1, 2, 3).stream()
.mapToInt(integer -> integer)
.sum();
assertEquals(sum , 5);
}
- assertTrue
- assertFalse
- assertNull
- assertNotNull
- assertEquals
- assertNotEquals
- assertArrayEquals
오버로딩된 함수들을 보면 Supplier<String> messageSupplier 인수를 가진 메서드들이 있는데, 인수에
() -> "~" 형식으로 하면 테스트 실패 시에 로그에 그 문자열을 출력한다. 처음 알았다.
예외 테스트
@Test
public void 예외_테스트() {
assertThrows(NumberFormatException.class, () -> Integer.valueOf(""));
}
만약 사용자 설정 예외이고, 예외 메세지를 설정하였고, 메세지도 테스트하고 싶다면 다음과 같이 한다.
public void throwException() {
throw new IllegalArgumentException("Not available");
}
@Test
void shouldThrowException() {
Exception exception = assertThrows(IllegalArgumentException.class, () -> throwException());
assertEquals(exception.getMessage(), "Not available");
}
참고:
javacan.tistory.com/entry/JUnit-5-Intro
'JUnit (Test)' 카테고리의 다른 글
@TestMethodOrder (0) | 2021.01.31 |
---|---|
JUnit 의 @TestInstance (0) | 2021.01.31 |
JUnit 5 새로 배운 것 (0) | 2021.01.30 |
Exception 테스트하기 (0) | 2020.12.06 |
private 메소드 테스트 (0) | 2020.12.06 |