JUnit 5

자바 프로그래밍 언어 용 단위 테스트 프레임워크
단위 테스트는 각 단위가 정확하게 동작하는지를 검사하는 테스트 기법으로 빠르게 작성할 수 있고 문제 발생 시 잘못된 부분을 손쉽게 장점이 있다.

 

 

JUnit 5 User Guide

Although the JUnit Jupiter programming model and extension model do not support JUnit 4 features such as Rules and Runners natively, it is not expected that source code maintainers will need to update all of their existing tests, test extensions, and custo

junit.org

 

 

Befor After

JUnit 테스트에 대하여 테스트의 실행/종료 시 호출
@BeforeEach
void setUp() {
    System.out.println("각각의 테스트 코드가 실행되기 전에 수행");
}

@AfterEach
void tearDown() {
    System.out.println("각각의 테스트 코드가 실행된 후에 수행\n");
}

@BeforeAll
static void beforeAll() {
    System.out.println("모든 테스트 코드가 실행되기 전에 최초로 수행\n");
}

@AfterAll
static void afterAll() {
    System.out.println("모든 테스트 코드가 수행된 후 마지막으로 수행");
}

테스트1 테스트 2라는 이름의 테스트가 있을 경우,

  1. beforeAll
  2. setUp
  3. 테스트1
  4. tearDown
  5. setUp
  6. 테스트2
  7. tearDown
  8. afterAll

순서로 실행되게 된다.

 

 

테스트 꾸미기 - DisplayName, Nested, TestMethodOrder

@DisplayName
테스트 네이밍
@Test
@DisplayName("테스트의 내용을 한눈에 알아볼 수 있게 네이밍 해줄 때")
void test1() {
    System.out.println("테스트 내용 빠르게 파악");
}

 

@Nested
테스트 그룹화 (클래스 화)
@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, @Order
Order로 테스트 실행 순서 지정
@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");
    }
}

 

 

테스트 반복 - RepeatedTest, ParameterizedTest

@RepeatedTest
value만큼 테스트 반복
@RepeatedTest(value = 5, name = "반복 테스트 {currentRepetition} / {totalRepetitions}")
void repeatTest(RepetitionInfo info) {
    System.out.println("테스트 반복 : " + info.getCurrentRepetition() + " / " + info.getTotalRepetitions());
}

 

@ParameterizedTest, @ValueSource
ValueSource에서 각 반복 회차의 파라미터 값을 넣어줄 수 있다.
@DisplayName("파라미터 값 활용하여 테스트 하기")
@ParameterizedTest
@ValueSource(ints = {1, 2, 3, 4, 5, 6, 7, 8, 9})
void parameterTest(int num) {
    System.out.println("5 * num = " + 5 * num);
}

반복 기능으로 분류하였으나 정확히는 파라미터 값을 넣을 수 있다는 것에 의미가 있다.

 

 

Assertion

실행 결과를 예측하고 검사한다.
assertEquals, assertNotEquals
값1, 2의 값이 동일한가? 동일하지 않은가?
@Test
@DisplayName("assertEquals")
void test1() {
    assertEquals(2.5, 5.0 / 2.0);
}
@Test
@DisplayName("assertNotEquals")
void test1_2() {
    assertNotEquals(2.5, 2);
}

 

assertTrue, assertFalse
값이 true인가? false인가?
@Test
@DisplayName("assertTrue 와 assertFalse")
void test2() {
    assertTrue(9 == 9);
    assertFalse(0 == 9);
}

 

assertNotNull, assertNull
값이 null이 아닌가? null인가?
@Test
@DisplayName("assertNotNull 과 assertNull")
void test3() {
    TestObject obj1 = new TestObject();
    TestObject obj2;
    assertNotNull(obj1);
    assertNull(obj2);
}

 

assertThrows
값이 Throwable을 던지는가?
@Test
@DisplayName("assertThrows")
void test4() {
    IllegalArgumentException exception = assertThrows(IllegalArgumentException.class, () -> 예외를 던질 메서드...);
    assertEquals("잘못된 연산자입니다.", exception.getMessage());
}

assertThrows의 경우 결과를 검사할 뿐만 아니라 throwable 객체를 반환 받을 수 있다.

 

 

Given, When, Then 패턴

테스트 코드를 보기 좋게 작성하기 위한 표현 방식

Given

  • 테스트 하고자하는 대상을 실제로 실행하기 전에 테스트에 필요한 값(상태)을 미리 선언한다.

When

  • 테스트 하고자하는 대상을 실제로 실행 시킨다.

Then

  • 테스트 실행 시 발생할거라고 예상되는 결과에 대해 예측하고 검사한다.
  • assertion이 사용된다.
 

[내배캠][TIL] 22일 차 - 목요일, Mockito? Jacoco?

📢 오늘의 목표 📢 ✔️ 알고리즘, SQL 문제 풀이✔️ 알고리즘 코드카타✔️ SQL 코드카타✔️ 프로그래머스 Level 2✔️ 스프링 입문 개인 과제✔️ 9단계✔️ use-case-diagram✔️ 스프링 공부 - 스

mountain-noroo.tistory.com

위 링크에서 이전에 Mockito를 사용해보며 작성했던 테스트 코드가 있다.

Given - When - Then 패턴을 적용하였기 때문에 참고하면 좋을 듯!

+ Recent posts