-
4. 스프링부트 퀵 스타트IT 서적/스프링부트 퀵 스타트 2023. 10. 22. 14:37
테스트와 로깅, 빌드
- 개발자들은 누구나 자신이 작성한 코드에 문제가 없음을 검증하기 위해 어떤 방법으로든 테스트 코드를 작성한다.
- 대부분의 프로젝트에서는 JUnit을 기반으로 일관성 있는 단위 테스트를 진행하는데, 단위 테스트란 자신이 작성한 클레스에 대한 테스트로서 테스트 단계 중에서 가장 기본이라고 할 수 있다.
우선 아래와 같은 의존성을 생성한다.
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</<artifactId> <scope>test</scope> </dependency>
또한, 아래와 같은 테스트를 위한 클레스를 생성한다.
package com.rubypaper; import org.junit.jupiter.api.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.core.env.Environment; import org.springframework.test.context.junit4.SpringRunner; @RunWith(SpringRunner.class) @SpringBootTest class Chapter03ApplicationTests { @Autowired Environment environment ; @Test void contextLoads() { System.out.println(environment.getProperty("author.name")); } }
- 먼저 클레스 선언부에 @RunWith가 추가되어 있는데, 이는 JUnit에서 기본적으로 제공하는 러너가 아닌 스프링 러너를 사용하기 위해서 추가한 것이다.
- 그리고 두번째로 SpringBootTest 어노테이션을 추가했는데, 이는 메인 클래스에 선언된 @SpringBootApplication과 비슷한 어노테이션이라고 생각하면 된다.
- SpringBootApplication이 사용자가 작성한 빈과 자동설정 빈들을 모두 초기화하듯이 @SpringBootTest 역시 테스트 케이스가 실행될 때 테스트에 필요한 모든 설정과 빈들을 자동으로 초기화하는 역할을 수행한다.
아래와 같이 Environment 클레스를 사용하면 application.properties에 있는 프라퍼티를 사용할 수 있다.
package com.rubypaper; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; //import org.junit.runner.RunWith; //import org.springframework.test.context.junit4.SpringRunner; import org.springframework.core.env.Environment; import com.rubypaper.controller.BoardController; //@RunWith(SpringRunner.class) @SpringBootTest(classes=BoardController.class) public class PropertiesTest { @Autowired Environment environment ; @Test public void testMetod() { System.out.println(environment.getProperty("author.name")); System.out.println(environment.getProperty("author.age")); } }
- application.properties에 아래와 같은 프라퍼티가 설정돼 있음.
MockMvc를 이용해서 컨트롤러 테스트 하기
- 테스트를 위해 실제 객체와 비슷한 모의 객체를 만드는 것을 모킹
- 모킹한 객체를 메모리에서 얻어내는 과정을 목업(Mock-up)이라고 한다.
- WebMvcTest는 @Controller와 @RestController가 설정된 클레스들을 찾아 메모리에 생성한다.
- 반면 @Service나 @Repository가 붙은 객체들은 테스트 대상이 아닌 것으로 처리한다.
- @WebMvcTest와 유사한 기능 중에는 @AutoConfigureMockMvc라는 것도 있다. 차이점은 @AutoConfigureMockMvc는 @Servicve, @Repository가 붙은 객체들도 모두 메모리에 적재한다.
MockMvc의 사용법은 아래와 같다.
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; import org.junit.jupiter.api.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.web.servlet.MockMvc; import com.rubypaper.controller.BoardController; @RunWith(SpringRunner.class) @WebMvcTest(BoardController.class) public class BoarderController { @Autowired private MockMvc mockMvc; @Test public void testHello() throws Exception { mockMvc.perform(get("/hello") .param("name", "둘리")) .andExpect(status().isOk()) .andExpect(content().string("Mock 테스트")) .andDo(print()); } }
'IT 서적 > 스프링부트 퀵 스타트' 카테고리의 다른 글
6. 스프링부트 퀵 스타트 (0) 2023.10.22 5. 스프링부트 퀵 스타트 (0) 2023.10.22 3. 스프링부트 퀵 스타트 (0) 2023.10.22 2. 스프링부트 퀵 스타트 (0) 2023.10.22 1. 스프링부트 퀵 스타트 (0) 2023.10.22