단위 테스트와 통합 테스트
단위 테스트. 일반적으로 메서드 단위로 수행하는 작은 단위의 테스트
통합 테스트: 호환성 등을 포함해 어플이 정상적으로 동작하는지 통합적으로 확인하는 테스트
테스트 코드를 작성하는 방법
Given-When-Then 패턴
Given: 테스트에 필요한 환경 설정
When: 테스트의 목적을 보여줌
Then: 테스트의 결과를 검증
이 패턴은 간단한 테스트로 여겨지는 단위 테스트에서는 잘 사용하지 않는다.
하지만 이걸로 테스트 코드를 작성하면 명세 문서의 역할을 수행한다는 점에서 도움이 된다.
좋은 테스트를 작성하는 5가지 속성
빠르게: 느리면 개발 속도도 느려짐
고립된: 하나의 테스트는 목적으로 여겨지는 하나의 대상에 대해서만 수행돼야 한다.
반복 가능한: 어떤 환경에서도, 개발 환경의 변화 등과 상관없이 실행할 수 있어야 한다.
자가 검증: 테스트가 성공했는지 실패했는지 알 수 있는 코드를 함께 작성해야 한다.
적시에: 어플리케이션 코드를 구현하기 전에 테스트 코드가 완성되어야 한다. (단 tdd 개발이 아니면 이 규칙은 제외하기도 한다.)
JUnit을 활용한 테스트 코드 작성
실습에는 6장 프로젝트를 사용하는데, serviceImpl에서 dao를 거쳐가는 방식 대신 repository를 이용해 바로 db에 접근하도록 수정하여 사용한다.
스프링 부트에서 제공하는 spring-boot-starter-test 라이브러리는 Junit 등의 다양한 테스트 도구를 제공한다.
JUnit의 생명주기
생명주기와 관련된 대표적인 어노테이션은 아래와 같다.
- @Test: 테스트 코드 메서드를 정의한다.
- @BeforeAll : 테스트를 시작하기 전에 호출되는 메서드를 정의
- @BeforeEach: 각 테스트 메서드가 실행되기 전에 동작하는 메서드를 정의
- @AfterAll: 테스트를 종료하면서 호출되는 메서드를 정의
- @AfterEach: 각 테스트 메서드가 종료되면서 호출되는 메서드를 정의
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
// 예제 7.4
public class TestLifeCycle {
@BeforeAll
static void beforeAll() {
System.out.println("## BeforeAll Annotation 호출 ##");
System.out.println();
}
@AfterAll
static void afterAll() {
System.out.println("## afterAll Annotation 호출 ##");
System.out.println();
}
@BeforeEach
void beforeEach() {
System.out.println("## beforeEach Annotation 호출 ##");
System.out.println();
}
@AfterEach
void afterEach() {
System.out.println("## afterEach Annotation 호출 ##");
System.out.println();
}
@Test
void test1() {
System.out.println("## test1 시작 ##");
System.out.println();
}
@Test
@DisplayName("Test Case 2!!!")
void test2() {
System.out.println("## test2 시작 ##");
System.out.println();
}
// Disabled Annotation : 테스트를 실행하지 않게 설정하는 어노테이션
@Test
@Disabled
void test3() {
System.out.println("## test3 시작 ##");
System.out.println();
}
}
예를 들어 이런 코드를 작성해서 실행하면
이렇게 콘솔에 찍히는 것을 볼 수 있다.
테스트3은 @Disabled 라서 @BeforeEach와 @AfterEach, 테스트코드3이 실행되지 않았지만 비활성화되었다는 메세지 로그는 뜨는 모습이다.
'개발 관련 공부 > 스프링부트 핵심 가이드' 카테고리의 다른 글
07 테스트 코드 작성하기(3) (1) | 2023.12.31 |
---|---|
07 테스트 코드 작성하기(2) (0) | 2023.12.24 |
06 데이터베이스 연동(3) (0) | 2023.10.28 |
06 데이터베이스 연동(2) (2) | 2023.10.14 |
06 데이터베이스 연동(1) (0) | 2023.10.03 |
댓글