일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- session
- 자바 orm
- presigned url
- @Valid
- 관점 지향 프로그래밍
- jwt
- 소셜 로그인
- 패러다임 불일치
- oauth2.0
- 도메인 주도 개발
- ec2 nginx websocket reverse proxy
- spring boot
- 백준 10815 # 백준 Java
- 스프링부트
- 예외 처리
- AWS
- OpenAI API
- CustomException
- springboot
- 개발 프로젝트
- spring websocket nginx 설정
- logout
- fastapi
- S3
- 구글 로그인
- wss 연결 실패
- Flask
- 이미지 업로드
- GoormIDE
- validation
Archives
- Today
- Total
개발세발은 안되요
[스프링부트3개발자되기] 04장: 스프링 부트 3과 테스트 본문
4.1 테스트 코드 개념 익히기
4.1.1 테스트코드란?
테스트 코드에는 다양한 패턴이 있다. 그 중 given-when-then 패턴을 사용하도록 하겠다.
given: 테스트 실행을 준비하는 단계
when: 테스트를 진행하는 단계
then: 테스트 결과를 검증하는 단계
@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(savedId).get(); assertThat(saveMenu.getName()).isEqualTo(name); assertThat(saveMenu.getPrice()).isEqualTo(price); }
4.2 스프링 부트 3와 테스트
스프링 부트는 애플리케이션을 테스트하기 위한 도구와 애너테이션을 제공한다. 이 중 JUnit과 AssertU를 가장 많이 사용한다.
4.2.1 JUnit이란?
자바 언어를 위한 단위 테스트 프레임워크이다. 단위 테스트란 작성한 코드가 의도대로 작동하는지 작은 단위로 검증하는 것을 의미한다. 단위는 보통 메서드가 된다. JUnit은 테스트끼리 영향을 주지 않도록 각 테스트를 실행할 때마다 테스트를 위한 실행 객체를 만들고 테스트가 종료되면 실행 객체를 삭제한다.
JUnit의 특징
- 테스트 방식을 구분할 수 있는 애너테이션 제공.
- @Test 애너테이션으로 메서드를 호출할 때마다 새 인스턴스를 생성하기 때문에 독립 테스트 가능.
- 예상 결과를 검증하는 어설션 메서드 제공.
- 사용 방법이 단순, 테스트 코드 작성 시간이 적음.
- 자동 실행, 자체 결과를 확인하고 즉각적인 피드백을 제공.
JUnit 애너테이션들
- @DisplayName : 테스트 이름을 지정.
- @Test : 테스트를 수행하는 메서드.
- @BeforeAll : 전체 테스트를 시작하기 전에 처음으로 한 번만 실행. 메서드를 static 으로 선언해야 함.
- @BeforeEach : 테스트 케이스를 시작하기 전에 매번 실행. 테스트 메서드에서 사용하는 객체를 초기화하거나 테스트에 필요한 값을 미리 넣을 때 등 사용할 수 있음. 메서드를 static 으로 선언해서는 안됨. 컨트롤러를 테슽트할 경우 여기에서 MockMvcSetUp()을 통해 MockMvc를 설정함.
- @AfterAll : 전체 테스트를 마치고 종료하기 전에 한 번만 실행함. 예를 들어 DB 연결을 종료할 때나 공통적으로 사용하는 자원을 해제할 때 사용할 수 있음. 메서드를 static 으로 선언해야 함.
- @AfterEach : 각 테스트 케이스를 종료하기 전 매번 실행함. 예를 들어 테스트 이후에 ㅌ특정 데이터를 삭제해야하는 경우 사용함. 메서드는 static 이 아니어야 함.
- @SpringBootTest : 메인 애플리케이션 클래스에 추가하는 애너테이션인 @SpringBootApplication이 있는 클래스를 찾고, 그 클래스에 포함되어있는 빈을 찾은 다음 테스트용 애플리케이션 컨텍스트라는 것을 생성.
- @AutoConfigureMockMvc : MockMvc를 생성하고 자동으로 구성하는 애너테이션. MockMvc는 애플리케이션을 서버에 배포하지 않고도 테스트용 Mvc 환경을 만들어 요청, 전송, 응답 기능을 제공하는 유틸리티 클래스. 즉 컨트롤러를 테스트할 때 사용되는 클래스.
AssertJ는 JUnit과 함께 사용해 검증문의 가독성을 높여줄 수 있다.
Assertions.assertEquals(sum, a+b); // 기댓값과 비교값이 잘 구분되지 않음.
assertThat(a+b).isEqualsTo(sum); // 가독성이 좋은 AssertJ 예
이를 위해 자주 사용하는 메서드들의 예
- isEqualsTo(A) : A값과 같은지 검증
- isNotEqualsTo(A) : A값과 다른지 검증
- contains(A) : A값을 포함하는지 검증
- doesNotContain(A) : A값을 포함하지 않는지 검증
- startsWith(A) : 접두사가 A인지 검증
- endsWith(A) : 접미사가 A인지 검증
- isEmpty() : 비어있는 값인지 검증
- isNotEmpty() : 비어있지 않은 값인지 검증
- isPositive() : 양수인지 검증
- isNegative() : 음수인지 검증
- isGreaterThan(1) : 1보다 큰 값인지 검증
- isLessThan(1) : 1보다 작은 값인지 검증
4.3 제대로 테스트 코드 작성해보기
이미 생성되어있는 클래스의 테스트코드 파일을 생성하고 싶다면, [option+enter] 을 누른다.
실습 중 사용한 메서드들
- perform() : 요청을 전송하는 역할을 하는 메서드. 결과로 ResultActions 객체를 받고, 이 객체는 반환값을 검증하고 확인하는 andExpect() 메서드를 제공함.
- accept() : 요청을 보낼 때 무슨 타입으로 응답을 받을지 결정하는 메서드.
- andExpect() : 응답을 검증함.
- jsonPath("$[0].${필드명}") : JSON 응닶값의 값을 가져오는 역할을 하는 메서드. 실습 코드에서는 0번째 배열에 들어있는 객체의 id, name 값을 가져오고 저장된 값과 같은지 확인함.
어려웠던 점
- option+enter을 통해 클래스를 포함시킬 때 어떤 클래스를 포함시켜야 하는지 몰라서 원본 깃허브의 도움을 받아야 했다.
- TestControllerTest 클래스를 작성할 때, 아래의 클래스를 포함해야 한다.
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
- 중간에 @Getter가 먹히지 않는 등 롬복이 전체적으로 먹히지 않는 문제가 발생했다. 이는 setting에 들어가서 plugin에 lombok을 설치해주었더니 해결되었다. (노트북을 새로 사서 그랬나 싶다,,)
'책 > 스프링부트3 개발자 되기: 자바편' 카테고리의 다른 글
[스프링부트3개발자되기] Ch6 : 블로그 기획하고 API 만들기(1) (0) | 2024.03.30 |
---|---|
[스프링부트3개발자되기] 05장 : 데이터베이스 조작이 편해지는 ORM (0) | 2024.03.22 |
[스프링부트3개발자되기] 03장 : 스프링 부트3 구조 이해하기 (0) | 2024.03.21 |
[스프링부트3개발자되기] 02장 : 스프링부트 3 시작하기 (0) | 2024.03.21 |
[스프링부트3개발자되기] 01장 : 자바 백엔드 개발자가 알아두면 좋은 지식 (0) | 2024.03.21 |