테스트 코드
- 애플리케이션이 의도한 대로 작동하는지 확인하기 위해 작성된 코드
- 개발자가 직접 코드의 결과를 수작업으로 확인하는 대신 자동화된 테스트로 특정 기능이 올바르게 동작하는지를 반복적으로 확인
테스트 코드의 종류
- 단위테스트
- 통합테스트
- 기능테스트
- 회귀테스트
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 |