Spring

[Spring] JUnit 이란?

배씌 2024. 5. 22. 13:47

단위 테스트(Unit Test) 란?

JUnit은 Java 에서 독립된 단위 테스트를 지원해주는 프레임워크 이다.

( ※단위테스트 : 특정 소스코드의 모듈이 의도한 대로 잘 작동하는지 검증하는 테스트. 즉, Spring 에서 단위테스트는 Spring Container 에 올라와 있는 Bean 을 테스트 하는 것.)

 

JUnit 이란?

  • Java 개발자가 가장 많이 사용하는 테스팅 기반 프레임워크
  • Java 8 이상을 필요로 함
  • 테스트 작성자를 위한 API 모듈과 테스트 실행을 위한 API가 분리되어 있음

 

JUnit 구조

JUnit 5 는 크게 3가지 모듈로 구성

JUnit 5 = JUnit Platform + JUnit Jupiter + JUnit Vintage
JUnit Jupiter API : JUnit 5에 새로 추가된 테스트 코드용 API
  • JUnit Platform : 테스트를 발견하고 테스트 계획을 생성하는 TestEngine 인터페이스 정의 즉, 기초적인 역할 수행
  • JUnit Jupiter : JUnit 5에서 테스트 및 Extension을 작성하기 위한 새로운 프로그래밍 모델과 확장모델의 조합

JUnit Jupiter -> 테스트 코드 작성 : junit-jupiter-api 모듈 / 테스트 실행 : junit-jupiter-engine 모듈

 

테스트의 Class & Method 어노테이션

  • Class : 최상위 클래스, static member class, @Nested class 중 적어도 하나의 메소드를 포함
  • Test Method : 실제 테스트 하고자 하는 내용
    • @Test : 테스트 메소드임을 나타냄
    • @ParametherizedTest : 매개변수가 있는 테스트임을 나타냄
    • @RepeatedTest : 반복되는 테스트를 나타냄
  • LifeCycle Method : Test의 Life Cycle에 따라 실행되는 메소드
    • @BeforeAll : 테스트 시작 지점에 딱 한번 실행(static 메소드만 가능)
    • @BeforeEach : 각 테스트 메소드가 실행되기 전 실행
    • @AfterAll : 테스트 종료 시점에 딱 한번 실행(static 메소드만 가능)
    • @AfterEach : 각 테스트 메소드가 실행되고 난 후 실행

※ 전체적인 Life Cycle

BeforeAll -> BeforeEach -> Test -> AfterEach -> AfterAll

 

 

Assertions

 : org.junit.jupiter.api.Assertions 패키지 사용

 

● assertEquals : 두 값 비교하여 일치 여부 판단

@Test
@DisplayName("assertEquals Test")
public void test () { 

	String expected = "2023/01/07";
    String actual = "2023/01/07";
    
    assertEqauls(expected, actual); // Test Succeed!
    
}

 

● assertArrayEquals : 두 배열 비교하여 일치 여부 판단 (두 배열 모두 null -> 동일하다 판단)

@Test
@DisplayName("assertArrayEquals Test")
public void test02() {
    
    char[] expected = {'J','u','n','i','t'};
    char[] actual = "Junit".toCharArray();

    System.out.println(expected == actual); // 동일성 측면에서는 false

     assertArrayEquals(expected, actual); // 동등성 측면에서는 true
 }

 

● assertNotNull & assertNull : 객체의 null 여부 확인

@Test
@DisplayName("assertNotNull & assertNull Test")
public void test03() {

	Object obj01 = null;
    Object obj02 = new String("오늘은 2023/01/07");

	assertNull(obj01);
    assertNotNull(obj02);

}

 

● assertThat : 첫 파라미터에 비교 대상 값, 두번째 파라미터에 비교 로직이 담긴 Matcher 를 받음

@Test
@DisplayName("assertThat Test")
public void test05(){
    //given
    Member member = new Member(1L, "memberA", Grade.VIP);
    
    //when
    memberService.join(member);
    Member findMember = memberService.findMember(2L);
    
    //then
    Assertions.assertThat(member).isEqualTo(findMember);
}

 ==> .isEqualTo() 사용해서 값이 같은지 확인