Test Code

2021. 1. 31. 21:23

유닛 테스트 vs 통합 테스트

유닛 테스트 - 테스트 단위 중 가장 작은 단위의 테스트, 주로 간단한 함수의 테스트를 담당한다. 입력값에 따른 함수의 출력이 정확한지 판단한다. 입력 범위 내의 데이터가 입력으로 주어졌을 시 적절한 동작으로 출력이 되는지, 입력 범위 밖의 데이터가 입력으로 주어졌을 시 알맞은 Exception을 Throw하는지 등등이 될 수 있다.

통합 테스트 - 각각의 시스템들이 서로 상호작용이 재대로 이루어지고 있는지 확인하는 테스트이다. 통합 테스트는 유닛 테스트만으로 충분하지 않을 때 사용한다. 통합테스트는 유닛 테스트를 수행하는 것보다 통상 시간이 오래 걸린다. 시스템을 구동하는데 드는 시간 때문이다.

기능 테스트는 Code레벨 테스트가 아니므로 따로 적는다. 기능 테스트는 기술 명세서에 적힌 대로 기능이 동작하는지 확인하는 테스트로 블랙 박스 테스트의 일종이다. 내부가 어떻게 동작하는지는 관심없고 원하는 동작만 하면 된다.

Spring-boot에서 지원하는 유닛 테스트와 통합 테스트 어노테이션

유닛 테스트 - @WebMvcTest, @DataJpaTest, @RestClientTest, @JsonTest 등등

통합 테스트 - @SpringBootTest

테스트 더블 종류

마틴 파울러 - Mock과 Stub 차이

마틴 파울러가 말하는 Mock과 Stub의 가장 큰 차이는 상태 테스트인가, 행위 테스트인가로 나눈다.

하지만 Mockito Framework이나 다른 Test FrameWork에서는 일반적으로 Mock과 Stub을 엄밀히 분리해서 사용하지 않는다.

아래는 Mockito에서의 Mock, Stub, Spy에 대해서 필자의 생각을 정리한 것으로 오해없기를 바란다.

  1. Stub - 테스트 동안에 임의로 만들어진 응답을 하는 객체이다.

  2. Mock - 테스트를 위한 가짜 객체이다. 인스턴스의 형태만 취하고 있는 객체로 필드 및 메소드가 없다.

  3. Spy - 진짜 객체를 감싸서 만든 객체이다. 해당 인스턴스의 필드 및 메소드를 실행할 수 있다.

Spring-boot 테스트 더블 어노테이션

@MockBean, @SpyBean

테스트 방법 - Given When Then

테스트를 3가지 부분으로 나누어 구현하면 조금 더 체계적인 테스트를 할 수 있다.

Given

테스트에 필요한 테스트 더블 객체의 행동을 정의하는 것.

When

테스트하고자하는 상황.

Then

실제 결과와 예측되는 결과를 검증하는 것.

Spring-boot test시 알아두면 유용한 것들

  1. @Transactional
    테스트 코드에서 Transactional 어노테이션은 테스트 완료 후 자동으로 rollback 처리 한다.

  2. MockMvc
    브라우저에서의 요청과 응답을 수행하도록 해주는 객체로서 Controller 테스트에 용이하다.

    @BeforeEach
    public void setup() {
        mockMvc = MockMvcBuilders.standaloneSetup(Controller)
                .setControllerAdvice(new ExceptionHandlerController())
                .build();
    }

    ControllerAdvice도 이렇게 추가해주어야 실행이 된다.

  3. 테스트를 위한 properties
    @SpringbootTest의 속성으로 test만을 위한 appliction.properties를 설정할 수 있다.

    @SpringBootTest( 
      properties = {"spring.config.location=classpath:application-test.properties"} 
    )

'Java > Spring boot' 카테고리의 다른 글

Gradle로 Github Action에 Coveralls 적용 방법  (0) 2021.01.31
springfox swagger-ui 3.0.0 버전 적용법  (0) 2021.01.09

BELATED ARTICLES

more