새소식

반응형
Spring/Test

[SpringTest] @ParameterizedTest 사용해보기

  • -
반응형

특정 테스트를 작성할 때 input의 형태는 정해져 있는데 많은 값들을 검증해야 하는 경우에 각각을 테스트케이스로 만들기는 너무 귀찮고 번거롭다.. 이러한 상황에서 활용할 수 있는 JUnit 어노테이션을 알아보자.

 

Dependency 

스프링 부트를 이용해서 개발하고 있다고 하면 테스트를 작성하기 위해 추가해야 할 dependency는 간단하다

    // gradle
    dependencies { 
        testImplementation 'org.springframework.boot:spring-boot-starter-test'
    }

 

    // maven
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
    </dependency>

 

사용법

예시로 다양한 osType별 system type 체크가 필요할 때

우선 하나의 타입에 해당하는 테스트 케이스를 만들었다

이제 나머지 타입에 해당하는 모든 테스트 케이스를 만들어야 하는데 아찔하다

 

형태는 동일한데 들어오는 값들만 달라지는 것이니 공통화해서 한방에 처리할 수 있다

    @Test
    void checkOsTypeTest() {
        Token token = Token.builder()
                           .sType("SYSTEM_ANDRO")
                           .build();

        Assertions.assertThatThrownBy(() -> token.checkOsType("ANDROID"))
                  .isInstanceOf(CheckException.class);
    }

 

 

아래와 같이 @ParameterizedTest를 붙여주고

원하는 데이터 Source를 정의해 주면 된다

    @ParameterizedTest(name = "System Type : {0} test")
    @CsvSource({"SYSTEM_ANDRO,ANDROID", "SYSTEM_IOS,IOS", "SYSTEM_Lin,Linux", "SYSTEM_MAC,MAC"})
    void checkOsTypeTest(String sysType, String opType) {
        Token token = Token.builder()
                           .sType(sysType)
                           .build();

        Assertions.assertThatThrownBy(() -> token.checkOsType(opType))
                  .isInstanceOf(CheckException.class);
    }

 

다양한 데이터 소스가 존재하는데 실무에서 많이 사용될 것이라고 생각되는 것들은 CSV와 Method이다

    @ParameterizedTest(name = "System Type : {0} test")
    @MethodSource("testMeth")
    void checkOsTypeTest(String sysType, String opType) {
        Token token = Token.builder()
                           .sType(sysType)
                           .build();

        Assertions.assertThatThrownBy(() -> token.checkOsType(opType))
                  .isInstanceOf(CheckException.class);
    }
    private static Stream<Arguments> testMeth() {
        return Stream.of(
           Arguments.of("SYSTEM_ANDRO","ANDROID")
           Arguments.of("SYSTEM_IOS","IOS")
    );

 

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.