모르지 않다는 것은 아는것과 다르다.

Junit

파라미터를 사용해서 테스트하기

채마스 2022. 2. 27. 01:49

Junit4 - JUnitParams

  • 아래 코드는 중복된 코드가 많아 보인다. -> 원인은 매개변수를 받지 못했기 때문이다.
public class EventTest {

    ...

    @Test
    public void testFree() {
        // Given
        Event event = Event.builder()
                .basePrice(0)
                .maxPrice(0)
                .build();

        // When
        event.update();

        // Then
        assertThat(event.isFree()).isTrue();

        // Given
        event = Event.builder()
                .basePrice(100)
                .maxPrice(0)
                .build();

        // When
        event.update();

        // Then
        assertThat(event.isFree()).isFalse();

        // Given
        event = Event.builder()
                .basePrice(0)
                .maxPrice(100)
                .build();

        // When
        event.update();

        // Then
        assertThat(event.isFree()).isFalse();
    }
  • 매개변수를 사용하면 위의 코드를 3분의1로 줄일 수 있다.



@RunWith(JUnitParamsRunner.class)
public class EventTest {

    ...

    @Test
    @Parameters(method = "parametersForTestFree")
    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}
        };
    }
  • testCompile 'pl.pragmatists:JUnitParams:1.1.1' 을 추가한다.
  • @RunWith(JUnitParamsRunner.class) 로 설정해준다.
  • parametersForTestFree() 를 이용해서 매개변수를 설정해준다.
  • 그렇게 하면 테스트 코드에서도 매개변수를 사용할 수 있다.



Junit 5 - @ParameterizedTest

public class Numbers {
    public static boolean isOdd(int number) {
        return number % 2 != 0;
    }
}
@ParameterizedTest
@ValueSource(ints = {1, 3, 5, -3, 15, Integer.MAX_VALUE}) // six numbers
void isOdd_ShouldReturnTrueForOddNumbers(int number) {
    assertTrue(Numbers.isOdd(number));
}




REFERENCES

'Junit' 카테고리의 다른 글

SpringBatch Test  (0) 2022.04.02
테스트 더블  (0) 2022.02.27
WebMvc Test  (0) 2022.02.27
단위테스트 vs 통합테스트  (0) 2022.02.27
Service 단위테스트  (0) 2022.02.27