개발강의정리/Spring

[스프링 기반 REST API 개발] 2-9. Event 생성 API 구현: 매개변수를 이용한 테스트

nineDeveloper 2019. 12. 28.
728x90

스프링 기반 REST API 개발

2. 이벤트 생성 API 개발

포스팅 참조 정보

GitHub

공부한 내용은 GitHub에 공부용 Organizations에 정리 하고 있습니다

해당 포스팅에 대한 내용의 GitHub 주소

실습 내용이나 자세한 소스코드는 GitHub에 있습니다
포스팅 내용은 간략하게 추린 핵심 내용만 포스팅되어 있습니다

https://github.com/freespringlecture/spring-rest-api-study/tree/chap02-09_parameter_test

해당 포스팅 참고 인프런 강의

https://www.inflearn.com/course/spring_rest-api/dashboard

실습 환경

  • Java Version: Java 11
  • SpringBoot Version: 2.1.2.RELEASE

9. Event 생성 API 구현: 매개변수를 이용한 테스트

테스트 코드 리팩토링

  • 테스트에서 중복 코드 제거
  • 매개변수만 바꿀 수 있으면 좋겠는데?
  • JUnitParams

JUnitParams

https://github.com/Pragmatists/JUnitParams

  • 파라메터를 사용한 테스트 코드를 만들기 쉽게 해주는 라이브러리
  • 원래 JUnit은 메서드 파라메터를 가질 수 없음
  • 메서드 파라메터에 들어갈 값들을 정의하는 방법을 제공
    <dependency>
      <groupId>pl.pragmatists</groupId>
      <artifactId>JUnitParams</artifactId>
      <version>1.1.1</version>
      <scope>test</scope>
    </dependency>

@RunWith 설정

@RunWith(JUnitParamsRunner.class)

EventTest 테스트 코드 리팩토링

package me.freelife.rest.events;

import junitparams.JUnitParamsRunner;
import junitparams.Parameters;
import org.junit.Test;
import org.junit.runner.RunWith;

import static org.assertj.core.api.Assertions.assertThat;

@RunWith(JUnitParamsRunner.class)
public class EventTest {

    ...

    @Test
    @Parameters
    public void testFree(int basePrice, int maxPrice, boolean isFree) {
        // Given
        Event event = Event.builder()
                .basePrice(basePrice)
                .maxPrice(maxPrice)
                .build();

        // When
        event.update();

        // Then
        assertThat(event.isFree()).isEqualTo(isFree);
    }

    //parametersFor prefix가 테스트 메서드를 찾아서 자동으로 파라메터로 사용을 해줌
    private Object[] parametersForTestFree() {
        return new Object[] {
            new Object[] {0, 0, true},
            new Object[] {100, 0, false},
            new Object[] {0, 100, false},
            new Object[] {100, 200, false}
        };
    }

    @Test
    @Parameters
    public void testOffline(String location, boolean isOffline) {
        // Given
        Event event = Event.builder()
                .location(location)
                .build();

        // When
        event.update();

        // Then
        assertThat(event.isOffline()).isEqualTo(isOffline);
    }

    private Object[] parametersForTestOffline() {
        return new Object[] {
            new Object[] {"강남", true},
            new Object[] {null, false},
            new Object[] {"           ", false}
        };
    }

}
728x90

댓글

💲 추천 글