1. 테스트 코드
- 꼼꼼히 잘 작성해야 좋은 프로그래밍이다. 당연하다.
- JS진영의 JEST기반의 유테/통테를 사용해봤으니, 금방 익혔으면 좋겠다.
2. SpringBoot의 테스트코드
- test 디렉터리에서 작업한다.
- 다양한 패턴이 있으나, 여기에서는 given-when-then 패턴을 사용한다.
- given : 테스트 실행을 준비하는 단계
- when : 테스트를 진행하는 단계
- then : 테스트 결과를 검증하는 단계
3. SpringBoot의 테스트도구
- spring-boot-starter-test 스타터에 테스트를 위한 도구가 모여있다.
- 주로 JUnit과 AssertJ를 가장 많이 사용한다.
4. JUnit 사용 배우기
- JUnit : 단위테스트에 사용한다. 테스트 방식을 구분할 수 있는 애너테이션 제공, @Test로 메서드를 호출할 때마다 새 인스턴스 생성 (독립테스트 가능), 단순, 자동실행, 즉각피드백 제공
- test/JUnitTest.java
- 테스트 코드는 JEST와 비스무리하다. 오히려 쉬운 것 같다. Assertion을 통해 기대값과 검증할 값을 비교한다.
- 실행하면 콘솔에 다음과 같이 테스트 결과를 출력한다.
5. JUnit을 활용한 사이클테스트
- test/JUnitCycleTest.java
- @BeforeAll : DB를 연결하거나 테스트 환경을 초기화할 때 사용된다. static 필수
- @BeforeEach : 테스트 메서드에서 사용하는 객체를 초기화하거나 필요한 값을 미리 넣을 때 사용. static이 아니어야 한다
- @AfterAll : DB 연결을 종료할 때나 공통 자원을 해제할 때 사용된다. static 필수
- @AfterEach : 테스트 이후 특정데이터를 삭제해야 할 경우 사용한다. static이 아니어야 한다
6. AssertJ로 검증문의 가독성 높이기
- AssertJ 라이브러리를 통해 기대값과 검증값을 분리해서 가독성이 좋아지도록 한다.
- isEqualTo(A) : A와 값이 같은지 검증
- isNotEqualTo(A) : 다른지 검증
- contains(A) : A값을 포함하는지 검증
등등이 있다.
7. 실제 테스트코드 적용해보기
- 테스트를 생성한다
- 테스트코드에 애너테이션이 많다.
- @SpringBootTest : 메인 앱 클래스에 추가하는 @SpringBootApplication이 있는 클래스를 찾고 그 클래스에 포함되어 있는 빈을 찾은 다음 테스트용 앱 컨텍스트를 만든다.
- @AutoConfigureMockMvc : MockMvc를 생성하고 자동으로 구성하는 애너테이션이다. 이는 앱을 서버에 배포하지 않고도 테스트용 MVC 환경을 만들어 요청 및 전송, 응답 기능을 제공한느 유틸 클래스이다. (컨트롤러 테스트)
- @BeforeEach : 여기서는 MockMvcSetUp() 메서드를 통해 MockMvc를 설정한다.
- @AfterEach : 여기서는 member테이블에 있는 데이터를 모두 삭제해준다.
- 같은블럭 아래에 더 작성해준다.
1) given : 멤버를 저장한다.
2) when : 멤버 리스트를 조회하는 API를 호출한다.
- perform() 메서드는 요청을 전송하는 역할을 하는 메서드이다. 결과로 REsultActions 객체를 받으며, ResultActions 객체는 반환값을 검증하고 확인하는 andExpect() 메서드를 제공한다.
- accept() 메서드는 무슨 타입으로 응답을 받을지 결정하는 메서드이다. 여기서는 JSON을 받는다고 명시한다.
3) then : 응답코드가 200OK이고, 반환받은 값 중에 0번째 요소의 id와 name이 저장된 값과 같은지 확인한다.
- andExpect()는 응답을 검증한다.
- isOk()는 200 OK를 검증한다. (isCreated(), isForbidden() 등 여러 HTTP 관련 응답메서드가 있다.)
- jsonPath("$[0].필드명")은 JSON 응답값의 값을 가져오는 역할을 한다. 0번째 배열에 들어있는 객체의 id, name 값을 가져오고 확인검증한다.
- 결과
'Backend - Java Spring > SB 입문(완)' 카테고리의 다른 글
[SpringBoot3] Blog 기획하고 API 만들어보기 (0) | 2023.10.21 |
---|---|
[SpringBoot3] 데이터베이스 (0) | 2023.10.20 |
[SpringBoot3] SpringBoot3 구조 살펴보기 (0) | 2023.10.20 |
[SpringBoot3] SpringBoot3와 자바버전 (0) | 2023.10.20 |
[SpringBoot3] Node&Express개발자의 SpringBoot 조온나쉽게 시작하기 (0) | 2023.10.20 |
댓글