API 문서화와 테스팅

웰시고기·2021년 2월 13일
0

문제점

  • REST API를 문서화하는 것은 다른 개발자가 알아보기 쉽게 하기 위해서 중요하다.
  • 하지만 수정할 때마다 직접 문서를 유지보수하는 것은 번거롭고 힘들다.

Swagger

  • Swagger는 OpenApi Specification을 위한 프레임워크로 API를 자동으로 문서화해준다.
  • 구성요소
    - Swagger Editor : 브라우저 기반의 OpenApi Spec을 쓸수 있는 에디터
    - Swagger UI : 웹에서 OpenApi Spec를 렌더링해 상호작용 가능한 API 문서를 제공(HTML, JS, CSS 파일로 구성)
    • Swagger Codegen : OpenAPI spec으로부터 서버와 클라이언트 라이브러리를 위한 툴
  • 추가적으로 @ApiResponses를 통해 결과 코드를 커스텀할 수 있다.
  • 다음과 같이 설정파일을 작성하면 모든 API가 문서화된다.
@Configuration
@EnableSwagger2

public class SwaggerConfig {
   @Bean
   public Docket api() {
       return new Docket(DocumentationType.SWAGGER_2)
               .select()
               .apis(RequestHandlerSelectors.any())
               .paths(PathSelectors.any())
               .build();
   }
}

Unit Testing & Integration testing

  • Unit Testing은 JUnit, Mockito, Spring Test를 활용해 테스트한다. 여기서 Mockito는 JUnit위에서 동작하며 Mocking과 Verification을 도와주는 프레임워크이다. Mocking은 가짜 객체를 만들어 테스트하는 것을 의미한다. 예시 코드는 다음과 같다.
@RunWith(SpringRunner.class)
@WebMvcTest(DogController.class)
public class DogControllerUnitTest {
    @Autowired
    private MockMvc mockMvc;

    @MockBean
    DogService dogService;

    @Test
    public void getBreeds() throws Exception {
        mockMvc.perform(get("/dogs/breed"))
                .andExpect(status().isOk())
                .andExpect(content().json("[]"));

        verify(dogService, times(1)).retrieveDogBreed();
    }
  • Integration Testing은 하나의 컴포넌트가 아닌 전체 애플리케이션을 테스팅한다.
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@AutoConfigureMockMvc
public class DogControllerIntegrationTest {
    @LocalServerPort
    private int port;

    @Autowired
    private TestRestTemplate restTemplate;

    @Test
    public void getBreeds(){
        ResponseEntity<List> response = this.restTemplate.getForEntity("http://localhost:" + port + "/dogs/breed", List.class);

        assertThat(response.getStatusCode(), equalTo(HttpStatus.OK));
    }

0개의 댓글