본문 바로가기

Server Development/Testing

Integration Test

 

 

 

통합 테스트란?

- 각 모듈들이 서로 상호작용이 잘 이루어지는지 검증하는 테스트 과정으로, 모듈을 통합하는 과정에서 발생하는 오류들을 발견할 수 있다.

- 스프링 부트에서 통합테스트는 Controller -> Service -> Repositorty에 거친 하나의 API에 대해서 각 모듈들이 잘 연결되어 있는지 체크할 수 있다.

- 블랙박스 테스팅(E2E(end to end), 실제 사용자의 환경과 거의 동일한 환경에서 테스팅)을 가능하게 한다.

 

 

 

장, 단점

장점 : UI 없이 테스팅 가능, 모든 빈을 컨트롤러에 올려 테스트하기에 실제와 유사한 환경 제공

단점 : 모든 빈을 올리기에 시간이 오래걸리며, 특정 빈이나 계층에서 발생하는 오류를 디버깅하기가 까다롭다.

 

 

 

설정

1. @SpringBootTest

-> Context에 필요한 빈들을 올리기위해 사용되는 애너테이션, 제어의 역전을 제공해준다. 

2. @Transactional

-> 테스트 메서드가 실행될때마다 데이터베이스를 롤백 처리, 이를 원치않는 메서드 존재 시, 테스트 메서드 위에 @Rollback(false) 작성

3. @AutoConfigureMockMvc

-> API 테스트를 위해 해당 클래스에 MockMvc 클래스를 주입시켜준다. 이 후, 필드를 만들고 사용하여 API를 테스팅한다.

4. @Order + @TestMethodOrder(OrderAnnotation.class)

-> 테스트의 순서지정.

5. @ActiveProfiles("파일명")

-> 테스트 코드에서 실제 DB사용이 아닌 H2등을 사용하고 싶다와 같이 다른 설정을 사용하는 경우에 파일 생성 후 사용

 

 

 

예시 코드

@SpringBootTest
@ActiveProfiles("test")
@AutoConfigureMockMvc
@Transactional
@TestMethodOrder(OrderAnnotation.class)
class MemberAPITest {

  @Autowired
  protected MockMvc mvc;


  @Test
  @Order(1)
  @DisplayName("MemberAPI : Register Member")
  public void testRegisterMember() throws Exception {
    // given
    MemberDTO sample = MemberDTO.sample();
    String response = "success";

    // when
    ResultActions resultActions = mvc.perform(MockMvcRequestBuilders.post("/member")
        .with(csrf()).contentType(MediaType.APPLICATION_JSON).content(new Gson().toJson(sample)));

    // then
    resultActions.andExpect(status().isOk())
        .andExpect(MockMvcResultMatchers.content().string(equalTo(response)));

  }
}

 

 

- BDD(Given - When - Then) 과정을 준수한 테스트 코드

- 해당 코드는 회원 가입 API 테스트로 나머지 API에 대한 테스트 코드도 작성하면 된다.

 

 

 

 

 

 

 

 

 

 

'Server Development > Testing' 카테고리의 다른 글

UNIT TEST - JUNIT5, Mockito  (0) 2023.07.16
Apache Jmeter  (0) 2023.05.15
Test Coverage with Jacoco  (0) 2023.04.02
Unit Test with MVC  (0) 2023.04.02
Swagger  (0) 2023.04.01