단위 테스트는 작은 단위로 쪼개서 각 단위가 정확하게 동작하는지를 검사하는 테스트 기법이다.
버그 발견 시간이 늦어짐에 따라 비용이 기하급수적으로 커지는 걸 알 수 있다.
따라서 테스트 코드를 작성한다면 프로그램의 버그를 사전에 발견하여 기하급수적인 비용의 증가가능성을 사전에 방지할 수 있다.
JUnit5는 자바 프로그래밍 언어 용 단위 테스트 프레임워크이다.
각각의 테스트 코드가 실행되기 전에 수행되는 메서드를 만들어준다.
@BeforeEach
void setUp() {
System.out.println("각각의 테스트 코드가 실행되기 전에 수행");
}
각각의 테스트 코드가 실행된 후에 수행되는 메서드를 만들어준다.
@AfterEach
void tearDown() {
System.out.println("각각의 테스트 코드가 실행된 후에 수행\n");
}
모든 테스트 코드가 수행되기 전에 최초로 수행되는 메서드를 만들어 준다.
static
메서드로 만들어야 한다.@BeforeAll
static void beforeAll() {
System.out.println("모든 테스트 코드가 실행되기 전에 초초로 수행\n");
}
모든 테스트 코드가 수행된 후 마지막으로 수행되는 메서드를 만들어 준다.
static
메서드로 만들어야 한다.@AfterAll
static void afterAll() {
System.out.println("모든 테스트 코드가 실행된 후 마지막으로 수행\n");
}
@Test
@DisplayName("테스트의 내용을 한눈에 알아볼 수 있게 네이밍 해줄 수 있습니다.")
void test1() {
System.out.println("테스트의 수행 내용들을 빠르게 파악할 수 있습니다.");
}
주제 별로 테스트를 그룹지어서 파악하기 좋다.
@Nested
@DisplayName("주제 별로 테스트를 그룹지어서 파악하기 좋습니다.")
class Test1 {
@Test
@DisplayName("Test1 - test1()")
void test1() {
System.out.println("Test1.test1");
}
@Test
@DisplayName("Test1 - test2()")
void test2() {
System.out.println("Test1.test2");
}
}
@Nested
@DisplayName("Test2 다른 주제")
class Test2 {
@Test
@DisplayName("Test2 - test1()")
void test1() {
System.out.println("Test2.test1");
}
@Test
@DisplayName("Test2 - test2()")
void test2() {
System.out.println("Test2.test2");
}
}
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
애너테이션 설정을 해야한다.@Order(2)
애너테이션을 추가하고 ()
괄호안에 순서를 입력한다.@Nested
@DisplayName("주제 별로 테스트를 그룹지어서 파악하기 좋습니다.")
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
class Test1 {
@Order(1)
@Test
@DisplayName("Test1 클래스")
void test() {
System.out.println("\nTest1 클래스");
}
@Order(3)
@Test
@DisplayName("Test1 - test1()")
void test1() {
System.out.println("Test1.test1");
}
@Order(2)
@Test
@DisplayName("Test1 - test2()")
void test2() {
System.out.println("Test1.test2");
}
}
RepetitionInfo
값을 파라미터로 받아서 현재 반복 횟수와 총 횟수 값을 확인할 수 있다.@RepeatedTest(value = 5, name = "반복 테스트 {currentRepetition} / {totalRepetitions}")
void repeatTest(RepetitionInfo info) {
System.out.println("테스트 반복 : " + info.getCurrentRepetition() + " / " + info.getTotalRepetitions());
}
@ValueSource(ints = {1, 2, 3, 4, 5, 6, 7, 8, 9})
를 사용하여 파라미터 값을 전달 할 수 있다.@DisplayName("파라미터 값 활용하여 테스트 하기")
@ParameterizedTest
@ValueSource(ints = {1, 2, 3, 4, 5, 6, 7, 8, 9})
void parameterTest(int num) {
System.out.println("5 * num = " + 5 * num);
}