JUnit5 Annotation Tips 
JUnit을 저번 주에 너무 얼렁뚱땅 사용하게 되어 기능들을 좀 찾아보고 정리하고자 글을 쓰게 되었다.
많은 블로그에 유익한 정보가 많았지만 ~내가 원하는 어노테이션 별 정리가 없는 것 같아 찾아 정리하게 되었다.
사실 내가 직접 찾아보고 공부해야 머리에 남는 것 같아 조금 정리하게 되었다.
목차
Annotation:
@Test
- 주석이 달린 메소드가 테스트 메소드임을 알림
- private이나 static이여서는 안되며, 값을 return해서도 안됨
@ParameterizedTest
- 다양한 인수를 사용하여 테스트를 여러 번 실행
- 1개 이상의 인수가 있어야 하며 int, short, String 등 심지어 class까지 가능하다.
@MethodSource
- 따로 지정하지 않으면 test method와 같은 이름의 methodsource를 찾는다.
- parameterizedTest를 할 때 사용하는데 테스트용 파라미터 재사용이 필요할 때 사용하면 용이하다고 느꼈다
@ParameterizedTest
@MethodSource("stringProvider")
void testWithExplicitLocalMethodSource(String argument) {
assertNotNull(argument);
}
static Stream<String> stringProvider() {
return Stream.of("apple", "banana");
}
- 또한 이렇게 여러 argument를 한꺼번에 주는 것도 가능하다.
@ParameterizedTest
@MethodSource("stringIntAndListProvider")
void testWithMultiArgMethodSource(String str, int num, List<String> list) {
assertEquals(5, str.length());
assertTrue(num >=1 && num <=2);
assertEquals(2, list.size());
}
static Stream<Arguments> stringIntAndListProvider() {
return Stream.of(
arguments("apple", 1, Arrays.asList("a", "b")),
arguments("lemon", 2, Arrays.asList("x", "y"))
);
}
@RepeatedTest
- 원하는 횟수만큼 테스트를 반복해서 실행
- 임계값(failure threshold)을 설정하여 임계값 이상 실패시 테스트 종료 가능
@DisplayName
- test report나 test runner나 IDE상에 나타날 테스트의 이름을 설정하며 이모지, 특수기호 등도 사용가능하다.
@BeforeEach
@BeforeAll
- 테스트 실행 전에 먼저 실행시키는 것을 정의할 때 사용한다.
- 아래 코드와 같이 display name이나 test method name을 지정하여 사용 가능하다.
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestInfo;
@DisplayName("TestInfo Demo")
class TestInfoDemo {
TestInfoDemo(TestInfo testInfo) {
assertEquals("TestInfo Demo", testInfo.getDisplayName());
}
@BeforeEach
void init(TestInfo testInfo) {
String displayName = testInfo.getDisplayName();
assertTrue(displayName.equals("TEST 1") || displayName.equals("test2()"));
}
@Test
@DisplayName("TEST 1")
@Tag("my-tag")
void test1(TestInfo testInfo) {
assertEquals("TEST 1", testInfo.getDisplayName());
assertTrue(testInfo.getTags().contains("my-tag"));
}
@Test
void test2() {
}
}
References:
'일상+자잘한 일' 카테고리의 다른 글
[Git] error:does not have a commit checked out (0) | 2023.12.20 |
---|---|
백준 + 프로그래머스 500솔 자축 및 회고 (0) | 2023.11.30 |
[우테코/프리코스/Week2] assertThatThrownBy assertThatCode 차이 (0) | 2023.10.31 |
[우테코/프리코스/Day 1] JAVA 17설치 및 환경변수 설정 (0) | 2023.10.22 |
[C++] set operator 사용 시 const가 필요한 이유 (0) | 2023.10.12 |