SpringBoot

[SpringBoot] 테스트 코드

wwxs 2024. 10. 16. 09:16

테스트 코드

  • 애플리케이션이 의도한 대로 작동하는지 확인하기 위해 작성된 코드
  • 개발자가 직접 코드의 결과를 수작업으로 확인하는 대신 자동화된 테스트로 특정 기능이 올바르게 동작하는지를 반복적으로 확인

테스트 코드의 종류

  • 단위테스트
  • 통합테스트
  • 기능테스트
  • 회귀테스트

 

given-when-then 패턴

  • 테스트 코드를 세 단계로 구분해 작성하는 방식
  • 1) given: 테스트의 실행을 준비하는 단계
  • 2) when: 테스트를 진행하는 단계
  • 3) then: 테스트를 검증하는 단계

스프링부트 3 테스트

  • spring-boot-starter-test: 테스트를 위한 도구 모음

스프링부트 스타터 테스트 목록

  • 1) Junit 5: 자바 프로그래밍 언어용 단위 테스트 프레임워크
    • 테스트 방식을 구분할 수 있는 어노테이션을 제공
    • @Test를 사용: 메서드 호출 시 새 인스턴스 생성, 독립 테스트 가능
  • 2) Spring Test & Spring Boot Test: 스프링 부트용 통합테스트 지원
  • 3) AssertJ: 검증문인 Assertion을 작성하는데 사용되는 라이브러리
    • JUnit과 함께 사용
    • 검증문의 가독성을 향상

 

AssertJ의 메서드

  • isEqualTo(A): A값과 같은지 검증
  • isNotEqualTo(A): A값과 다른지 검증
  • contains(A): A값을 포함하는지 검증
  • doesNotContains(A): A값을 포함하지 않는지 검증
  • startsWith(A): 접두사가 A인지 검증
  • endsWith(A): 접미사가 A인지 검증
  • isEmpty(): 비어있는 값인지 검증
  • isNotEmpty(): 비어있지 않은 값인지 검증
  • isPositive(): 양수인지 검증
  • isNegative(): 음수인지 검증
  • isGreaterThan(1): 1보다 큰 값인지 검증
  • isLessThan(1): 1보다 작은 값인지 검증

 

 

 

 

(예제 코드)

더보기
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

public class JUnitTest {
    // @DisplayName
    // : 테스트 이름을 명시
    @DisplayName("1 + 2는 3이다.")
    // @Test
    // : 해당 어노테이션을 붙인 메서드는 테스트를 수행하는 메서드
    @Test
    public void junitTest() {
        int a = 1;
        int b = 2;
        int sum = 3;

        // .assertEquals
        // : JUnit에서 제공하는 검증 메서드
        // : 첫 번째 인자 - 기대하는 값
        // : 두 번째 인자 - 실제로 검증할 값
        Assertions.assertEquals(sum, a + b);
    }

//    @DisplayName("1 + 3는 4이다.")
//    @Test
//    public void junitFailedTest() {
//        int a = 1;
//        int b = 3;
//        int sum = 3;
//
//        Assertions.assertEquals(sum, a + b);
//    }
}
import org.junit.jupiter.api.*;

public class JUnitCycleTest {
    // 전체 테스트를 시작하기 전에 1회 실행
    // : static 키워드 사용 이유
    // : 객체를 생성하지 않고도 호출될 수 있음
    // : 클래스가 로드될 때 한 번만 실행
    @BeforeAll
    static void beforeAll() {
        System.out.println("@BeforeAll");
    }

    // 테스트 케이스를 시작하기 전마다 실행
    // : public 설정
    @BeforeEach
    public void beforeEach() {
        System.out.println("@BeforeEach");
    }

    @Test
    public void test1() {
        System.out.println("test1");
    }

    @Test
    public void test2() {
        System.out.println("test2");
    }

    @Test
    public void test3(){
        System.out.println("test3");
    }
    
    // 전체 테스트를 마치고 종료하기 전에 1회 실행하기 때문에
    // static 메서드로 선언
    @AfterAll
    static void afterAll() {
        System.out.println("@AfterAll");
    }

    // 테스트 케이스를 종료하기 전마다 실행
    @AfterEach
    public void afterEach() {
        System.out.println("@AfterEach");
    }

}

// @BeforeAll 클래스 레벨 설정
// @BeforeEach > @Test > @AfterEach 가 테스트 개수 만큼 반복
// @AfterAll 클래스 레벨 정리

결과:

@BeforeAll
@BeforeEach
test1
@AfterEach
@BeforeEach
test2
@AfterEach
@BeforeEach
test3
@AfterEach
@AfterAll

 

'SpringBoot' 카테고리의 다른 글

[SpringBoot] JpaRepository  (0) 2024.10.17
[SpringBoot] ORM, JPA  (0) 2024.10.16
[SpringBoot] DispatchServlet  (0) 2024.10.14
[SpringBoot] 기본 예제 코드  (0) 2024.10.14
[SpringBoot] Spring Boot  (0) 2024.10.14