spring-boot-starter-test 목록
스프링 부트에서 자바 애플리케이션을 테스트하기 위해 제공하는 도구 및 애너테이션
① JUnit : 자바 프로그래밍 언어용 단위테스트 프레임워크
② Spring Test & Spring Boot Test : 스프링 부트 애플리케이션을 위한 통합 테스트 지원
③ AssertJ : 검증문인 어션션을 작성하는데 사용되는 라이브러리
④ JSONassert : JSON용 어셜션 라이브러리
⑤ JsonPath : JSON 데이터에서 특정 데이터를 선택하고 검색하기 위한 라이브러리
⑥ Mockito : 테스트에 사용할 가짜 객체인 목 객체를 쉽게 만들고, 관리하고, 검증할 수 있게 지원하는 테스트 프레임워크
작성한 코드가 의도대로 작 동작하고 예상치 못한 문제가 없는지 확인할 목적으로 작성하는 코드로, 각각의 메서드 또는 기능별로 테스트 코드를 작성해서 실행시킬 수 있다.
엣지별로 테스트하기!
즉, JUnit으로 테스트 코드를 잘 작성하면 최소한 메서드나 기능 단위로는 문제가 생길까봐 걱정하지 않도록 해준다.
[테스트하고자는 클래스명 오른쪽클릭-Generate-Test]이다. 참고로 테스트 코드는 test 디렉터리에서 작업하며, 디렉터리 구조는 main 디렉터리와 같다.
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)
}
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보다 작은 값인지 검증