Java/STUDY HALLE

[Java] JUnit5

무토(MUTO) 2020. 12. 5. 04:32

1.JUnit은 무엇인가?

JUnit은 자바 개발자가 가장 많이 사용하는 테스트 프레임워크이다.
JUnit5는 4에서 5로 넘어오면서 여러개의 서브모듈로 나뉘었다 중요한 것들만 살펴보자면 다음과 같다.

  • Junit Platform
    • junit 테스트를 진행하기 위한 TestEngine API을 제공한다.
  • Junit Jupiter
    • JUnit5의 TestEngine API의 구현체
  • Junit Vintage
    • JUnit3과 JUnit4의 TestEngine API 구현체

2.Junit은 어떻게 사용하는가?

다음과 같이 IntelliJ 에서 gradle 기반으로 프로젝트를 생성하면 자동으로 JUnit4가 의존성 추가가 된다.
우리가 사용할 JUnit은 5 버전이기 때문에 MVNRepository를 접속해서 최신 안정화된 JUnit5버전을 찾아 해당 위치에 의존성을 추가한다.

MVN Repository에서 해당 gradle을 찾는다.
다음과 같이 build.gradle을 작성하면 Junit5를 실행할 수 있다.

예제

class AppTest {

    @BeforeAll
    static void testBeforeAll() {
        System.out.println("before all");
    }


    @AfterAll
    static void testAfterAll() {
        System.out.println("after all");
    }


    @BeforeEach
    void testBeforeEach() {
        System.out.println("before each");
    }


    @AfterEach
    void testAfterEach() {
        System.out.println("after each");
    }

    @Test
    @DisplayName("테스트1")
    void testName1() {
        assertArrayEquals(new int[]{1, 2, 3, 4, 5}, new int[]{1, 2, 3, 4, 5});
    }

    @Test
    @DisplayName("테스트2")
    void testName2() {
        System.out.println("22222222");
        List<Integer> list1 = new ArrayList<>();
        list1.add(1);
        list1.add(2);
        list1.add(3);

        List<Integer> list2 = new ArrayList<>();
        list2.add(1);
        list2.add(2);
        list2.add(3);
        assertIterableEquals(list1, list2);
    }

    @Test
    void testName3() {
        assertAll(
            () -> assertEquals(3, 3,"3 이 아닙니다."),
            () -> assertEquals("3", "3"),
            () -> assertTrue(true)
        );
        System.out.println("33333333");
    }

    @Test
    void testName4() {
        int[] arr = new int[10];
        assertThrows(
            IndexOutOfBoundsException.class,
            () -> {
                int a = arr[9];
            },
            ()-> {
                System.out.println("에러발생");
                return "this is error";
            }
            );
        System.out.println("44444444");
    }
}

3.JUnit5 기본 문법

@Test

  • 해당 메소드를 테스트케이스에 포함시킨다는 의미이다.

@BeforeAll

  • 모든 테스트 케이스가 실행 되기 전에 실행되는 메소드이다.
  • static 제어자를 붙여야 사용할 수 있다.

@AfterAll

  • 모든 테스트 케이스가 실행 된 후에 실행되는 메소드이다.
  • static 제어자를 붙여야 사용할 수 있다.

@BeforeEach

  • 각각의 테스트 케이스가 실행 되기 전에 실행되는 메소드이다.

@AfterEach

  • 각각의 테스트 케이스가 실행 된 후에 실행되는 메소드이다.

@DisplayName

  • 내가 원하는 테스트의 이름을 지어줄 수 있다.

4.JUnit5 Assertions

다양한 assertions가 있지만 해당 메소드만 있어도 대부분의 테스트를 완료 할 수 있다.

assertEquals(expected, actual)

  • 기대한 값이 실제 값과 일치하는지 확인한다.

assertArrayEquals(expected, actual)

  • 기대한 배열의 값이 실제 배열의 값과 일치하는지 확인한다.

assertIterableEquals(expected, actual)

  • 기대한 iterable 자료구조의 값이 실제 iterable 자료구조의 값과 일치하는지 확인한다.

assertNotNull(actual)

  • 기대한 값이 null이 아닌지 확인한다.

assertTrue(boolean)

  • 기대한 값이 참인지 확인한다.

assertAll(executable...)

  • 여러개의 케이스를 하나로 묶어 테스트 하는데 사용한다.

assertThrows(expectedType, executable)

  • 기대한 예외를 던지는지 확인한다.

해당 테스트 assert의 마지막 파라미터로 String 값을 대입하면 해당 테스트 에러 발생시 대입한 String값이 출력된다.
비슷하게 assert의 마지막 파라미터로 executable한 것을 대입하면 해당 테스트 에러 발생 시 작성한 문장이 실행된다.

'Java > STUDY HALLE' 카테고리의 다른 글

[Java] 선형 자료구조  (0) 2020.12.07
[Java] GitHub Library 사용법  (0) 2020.12.06
[Java] 제어문  (0) 2020.12.05
[Java] 연산자  (1) 2020.11.27
[Java] 데이터타입, 변수, 배열  (0) 2020.11.21