Facts
✅ 테스트 코드 작성 Using mockMvc
- 로그인, 회원가입
✅ API 문서 자동화 Using RestDoc
Findings
mockMvc를 사용하여 테스트 코드를 작성하면, 포스트맨을 사용할 필요가 없다.
포스트 맨에서 테스트 하는 것을 mockMvc로 수행하는 것이다.
여기서 테스트를 해보고 테스트 케이스를 만들 수도 있고
RestDoc까지 추가로 사용하면, 테스트를 통해, API 문서화를 할 수 있다.
mockMvc를 사용하여, 회원가입과 로그인 부분을 테스트를 했다.
mockMvc를 사용하여 통합 테스트하고, RestDoc 설정까지 추가하여 API 문서 자동화할 수 있게 해주었다.
@ExtendWith({RestDocumentationExtension.class, SpringExtension.class}) // Extension 기능 사용
@SpringBootTest()
@AutoConfigureMockMvc
@ActiveProfiles("test") // 사용할 properties 파일
@AutoConfigureRestDocs // Rest Docs 대해 Auto Configuration 함
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
public class ApiTest {
@Autowired
protected MockMvc mockMvc;
@Autowired
ObjectMapper objectMapper;
@BeforeEach
public void setUp(WebApplicationContext webApplicationContext, RestDocumentationContextProvider restDocumentation) {
// API를 호출할 수 있는 상태를 만들어준다.
this.mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext)
.addFilters(new CharacterEncodingFilter("UTF-8", true))
.alwaysDo(MockMvcResultHandlers.print())
.apply(documentationConfiguration(restDocumentation)).build();
}
@Test
@Order(1)
public void 회원가입() throws Exception {
SignupRequestDto dto = new SignupRequestDto();
dto.setUsername("abc");
dto.setPassword("1234");
dto.setNickname("go_higher");
String jsonString = new GsonBuilder().setPrettyPrinting().create().toJson(dto);
mockMvc.perform(post("/signup")
.contentType(MediaType.APPLICATION_JSON)
.content(jsonString)
.accept(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andDo(document("user/signup",
requestFields(
fieldWithPath("username").description("유저명"),
fieldWithPath("password").description("패스워드"),
fieldWithPath("nickname").description("닉네임"),
fieldWithPath("github_id").description("Github 아이디").optional().type(JsonFieldType.STRING),
fieldWithPath("introduce").description("유저소개").optional().type(JsonFieldType.STRING),
fieldWithPath("picture").description("유저이미지명").optional().type(JsonFieldType.STRING),
fieldWithPath("picture_real").description("유저이미지의 실제 위치").optional().type(JsonFieldType.STRING)
)
));
}
@Test
@Order(2)
public void 로그인() throws Exception {
UserDto dto = new UserDto();
dto.setUsername("abc");
dto.setPassword("1234");
String jsonString = new GsonBuilder().setPrettyPrinting().create().toJson(dto);
mockMvc.perform(post("/login")
.contentType(MediaType.APPLICATION_JSON)
.content(jsonString)
.accept(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andDo(document("user/login",
requestFields(
fieldWithPath("username").description("유저명"),
fieldWithPath("password").description("패스워드")
)
));
}
}
'Project > TIL, WIL' 카테고리의 다른 글
TIL(50) S3를 이용한 사진 업로드 기능 속도 개선하기 (0) | 2021.12.27 |
---|---|
TIL(49) 21-12-09: CORS 에러 해결하기 (0) | 2021.12.27 |
TIL(47) 21-12-07: ElasticBeanstalk으로 백엔드 아키텍처 구성하고 GithubAction으로 프로젝트 배포 (0) | 2021.12.27 |
TIL(46) 21-12-06: S3와 CloudFront로 프론트엔드 인프라 구성하기 (0) | 2021.12.27 |
TIL(45) 21-12-03 : Spring에서 게시글 Pagination 처리하기 (0) | 2021.12.27 |