SpringBoot의 Test : 테스트 코드란?

Eojin·2023년 6월 19일
0

➡️ Spring Boot3에서 제공하는 테스트 관련 도구

spring-boot-starter-test 목록
스프링 부트에서 자바 애플리케이션을 테스트하기 위해 제공하는 도구 및 애너테이션

① JUnit : 자바 프로그래밍 언어용 단위테스트 프레임워크
② Spring Test & Spring Boot Test : 스프링 부트 애플리케이션을 위한 통합 테스트 지원
③ AssertJ : 검증문인 어션션을 작성하는데 사용되는 라이브러리
④ JSONassert : JSON용 어셜션 라이브러리
⑤ JsonPath : JSON 데이터에서 특정 데이터를 선택하고 검색하기 위한 라이브러리
⑥ Mockito : 테스트에 사용할 가짜 객체인 목 객체를 쉽게 만들고, 관리하고, 검증할 수 있게 지원하는 테스트 프레임워크


➡️ 테스트 코드란?

작성한 코드가 의도대로 작 동작하고 예상치 못한 문제가 없는지 확인할 목적으로 작성하는 코드로, 각각의 메서드 또는 기능별로 테스트 코드를 작성해서 실행시킬 수 있다.

엣지별로 테스트하기!

즉, JUnit으로 테스트 코드를 잘 작성하면 최소한 메서드나 기능 단위로는 문제가 생길까봐 걱정하지 않도록 해준다.


✅ 테스트 코드 파일 생성하는 방법

[테스트하고자는 클래스명 오른쪽클릭-Generate-Test]이다. 참고로 테스트 코드는 test 디렉터리에서 작업하며, 디렉터리 구조는 main 디렉터리와 같다.


✅ 테스트 코드의 given-when-then 패턴

given : 테스트 실행준비 단계
when : 테스트 진행 단계
then : 테스트 결과검증 단계

(출처 : 스프링부트3 백엔드 개발자되기 자바편)

@DisplayName("새로운 메뉴를 저장한다.")
@Test
public void saveMenuTest() {

	//given : 메뉴를 저장하기 위한 준비과정 즉, 테스트 실행준비 단계
    final String name = "아메리카노";
    final int price = 2000;
    
    final Menu americano = new Menu(name, price);
    
    
    //when : 실제로 메뉴를 저장 즉, 테스트 진행 단계
    final long savedId = menuService.save(americano);
    
    
    //then : 메뉴가 잘 추가되었는지 검증 즉, 테스트 결과검증 단계
    final Menu savedMenu = menuService.findById(saveId).get();
   	assertThat(savedMenu.getName()).isEqualTo(name);
	assertThat(savedMenu.getPrice()).isEqualTo(price)   
}


➡️ EX01.

package com.sparta.springprepare.calculator; 

import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;


class CalculatorTest {
    //엣지별(각각의 상황. 여기서는 더하기, 빼기 , 곱하기, 나누기, 오류발생하는 케이스)로 테스트


    @Test
    @DisplayName("더하기 테스트")
    void test1() {
    
    	//given : 연산준비 (계산기 꺼내는 중)
        Calculator calculator = new Calculator();
        
        //when : 연산중 (계산기 두들기는 중)
        Double result = calculator.operate(8, "+", 2);
        System.out.println("addResult = " + result);

		//then : 검산중 
        Assertions.assertEquals(10, result);
    }


    @Test 
    @DisplayName("나누기 테스트")
    void test2() {
        Calculator calculator = new Calculator();
        
        Double result = calculator.operate(8, "/", 2);
        System.out.println("divideResult = " + result);

        Assertions.assertEquals(4, result);
    }
    
}

✅ 하나씩 뜯어보기

@DisplayName("더하기 테스트") : 테스트 이름

@Test : 테스트 방식을 구분할 수 있는 애너테이션으로, 메서드를 호출할 때마다 새 인스턴스를 생상하여 독립 테스트가 가능하다.

@BeforeAll : 전체 테스트를 시작하기 전에 한번 실행하라는 의미로, 메서드이 static으로 선언되어 있어야 한다.

@BeforeEach : 테스트 케이스를 시작하기 전마다 실행하라는 의미

@AfterAll : 전체 테스트를 마치고 종료하기 전에 한번 실행하므로, 메서드이 static으로 선언되어 있어야 한다.

@AfterEach : 테스트 케이스를 종료하기 전마다 실행하라는 의미

Assertion 클래스

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



profile
'함께'가 즐거운 개발 공부하는 사람입니다.

0개의 댓글

관련 채용 정보