✍학습 키워드
테스트 코드 개념 익히기
- 테스트 코드는 작성한 코드가 의도대로 잘 동작하고 예상치 못한 문제가 없는지 확인할 목적으로 작성하는 코드이다.
- test 디렉터리에서 작업한다
- 다양한 패턴이 존재하는데, given-when-then 패턴을 주로 사용한다
- given-when-then 패턴은 테스트 코드를 세 단계로 구분해 작성하는 방식을 말한다.
- given은 테스트 실행을 준비하는 단계
- when은 테스트를 진행하는 단계
- then은 테스트 결과를 검증하는 단계
- 준비하는 과정, 저장하는 과정(테스트), 검증하는 과정 이여서 세단계로 나뉘는 것이다.
- given-when-then 패턴은 테스트 코드를 세 단계로 구분해 작성하는 방식을 말한다.
@SpringBootTest
- 메인 애플리케이션 클래스에 추가하는 애너테이션인 @SpirngBootApplication이 있는 클래스를 찾고 그 클래스에 포함되어 있는 빈을 찾은 다음 테스트용 애플리케이션 컨텍스트 라는 것을 만든다.
@AutoConfigureMockMvc
- MockMvc는 애플리케이션을 서버에 배포하지 않고도 테스트용 MVC 환경을 만들어 요청 및 전송, 응답 기능을 제공하는 클래스, 컨트롤러를 테스트 할 때 사용하는 클래스이다.
📝새로 배운 개념
spring-boot-starter-test
- 테스트를 위한 도구가 모여 있다.
- JUnit : 자바 프로그래밍 언어용 단위 테스트 프레임워크
- Spring Test & Spring Boot Test : 스프링 부트 애플리케이션을 위한 통합 테스트 지원
- AssertJ : 검증문인 어설션을 작성하는 데 사용되는 라이브러리
- Mockito: 테스트에 사용할 가짜 객체인 목 객체를 쉽게 만들고, 관리하고, 검증할 수 있게 지원하는 테스트 프레임워크
- ⇒ JUnit과 AssertJ를 가장 많이 사용한다.
JUnit?
- 자바 언어를 위한 단위 테스트 프레임워크.
- 단위테스트 ⇒ 작성한 코드가 의도대로 작동하는지 작은 단위로 검증하는 것(보통 메소드)
@DisplayName("1 + 2 는 3이다") @Test // 테스트 메서드 public void junitTest(){ int a = 1; int b = 2; int sum = 3; Assertions.assertEquals(sum, a+ b); // 값이 같은지 확인 }
- @DisplayName ⇒ 테스트 이름을 명시
- @Test ⇒ 테스트를 수행하는 메서드 ( 테스트끼리 영향을 주지 않도록 각 테스트를 실행할 때마다 테스트를 위한 실행 객체를 만드로 테스트가 종료되면 실행 객체를 삭제한다. )
{
@BeforeAll // 전체 테스트를 시작하기 전에 1회 실행하므로 메서드는 static으로 선언
static void beforeAll() {
System.out.println("@BeforeAll");
}
@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");
}
@AfterAll // 전체 테스트를 마치고 종료하기 전에 1회 실행하므로 메서드는 static으로 선언
static void afterAll() {
System.out.println("@AfterAll");
}
@AfterEach // 테스트 케이스를 종료하기 전마다 실행
public void afterEach() {
System.out.println("@AfterEach");
}
}
- @BeforeAll 어노테이션
- 전체 테스트를 시작하기 전에 처음으로 한 번만 실행된다.
- DB 연결, 테스트 환경 초기화 등 / 한번만 호출되어야 하므로 static으로 선언해야 한다.
- 전체 테스트를 시작하기 전에 처음으로 한 번만 실행된다.
- @BeforeEach 어노테이션
- 테스트 케이스를 시작하기 전에 매번 실행한다.
- 테스트 메서드에서 사용하는 객체를 초기화하거나 테스트에 필요한 값을 미리 넣을때 사용
- 인스턴스마다 메소드 호출해야 하므로 static 아니어야 한다.
- 테스트 케이스를 시작하기 전에 매번 실행한다.
- @AfterAll 어노테이션
- 전체 테스트를 마치고 종료할때 한 번만 실행된다.
- DB 종료, 공통적으로 사용하는 자원 반환 / 마찬가지로 static으로 선언해야 한다.
- 전체 테스트를 마치고 종료할때 한 번만 실행된다.
- @AfterEach 어노테이션
- 테스트 케이스를 종료하기 전 매번 실행
- 테스트 종료 후 특정 데이터를 삭제해야 할때, 마찬가지로 static X
- 테스트 케이스를 종료하기 전 매번 실행
@BeforeAll
@BeforeEach
test1
@AfterEach
@BeforeEach
test2
@AfterEach
@BeforeEach
test3
@AfterEach
@AfterAll
결론은 이렇게 실행된다.
AssertJ
- 검증문의 가독성을 높여주는 라이브러리.
Assertions.assertEquals(sum, a+b); // 이건 JUnit의 메소드
이거랑
assertThat(a + b).isEqualTo(sum);
얘는 명확성이 다르잖아요.
✨느낀 점&자기 선언
테스트코드를 잘 짜자!
728x90
'개발 공부 기록 > 07. TIL' 카테고리의 다른 글
스프링 부트와 AWS로 혼자 구현하는 웹 서비스 TIL - 2장 테스트 코드 (1) | 2023.10.31 |
---|---|
스프링 부트 3로 백엔드 입문하기 TIL - 5장 : ORM (JPA) (0) | 2023.10.24 |
스프링 부트 3로 백엔드 입문하기 TIL - 3장 : 스프링 부트 3 구조 이해하기 (0) | 2023.10.24 |
스프링 부트 3로 백엔드 입문하기 TIL - 1~2장 : 스프링 부트 3 시작하기 (0) | 2023.10.23 |
코딩 자율학습 스프링 부트 3 자바 백엔드 개발 입문 TIL - 1장 스프링 부트 시작하기 ~ 2장 MVC 패턴 이해와 실습 (1) | 2023.10.23 |