JAVA

JUnitParamsRunner 매개변수를 이용하여 Junit 테스트

빅콜팝 2022. 12. 29. 21:53
728x90
반응형

매개변수를 이용하여 Junit 테스트하기, 여러 경우의 수를 간단하게 테스트 가능하게 해준다.

 

1. build.gradle dependency 추가

implementation 'pl.pragmatists:JUnitParams:1.1.1'

maven의 경우 https://github.com/Pragmatists/JUnitParams 참고

 

 

2. 테스트 클래스에 @RunWith 어노테이션 추가

@RunWith(JUnitParamsRunner.class)

 

3. @Parameters 어노테이션에 파라미터 넣어주기

@Parameters({
        "0, 0, true",
        "100, 0, false",
        "0, 100, false"
})

 

JUnitParamsRunner 적용 전 테스트

@Test
public void testFree(int basePrice, int maxPrice, boolean isFree){
    // 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();
}

 

JUnitParamsRunner 적용 후 테스트

@Test
@Parameters({
        "0, 0, true",
        "100, 0, false",
        "0, 100, false"
})
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);
}

 

번외, 파라미터를 메서드로 분리하면 좀 더 type safe 한 테스트가 가능해진다.

    @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);
    }

    private Object[] parametersForTestFree(){
        return new Object[]{
                new Object[] {0, 0, true},
                new Object[] {100, 0, false},
                new Object[] {0, 100, false}
        };
    }

 

테스트 클래스 전체 코드

@RunWith(JUnitParamsRunner.class)
public class EventTest {

    @Test
    @Parameters
    // (method = "parametersForTestFree") method 생략 가능
    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);
    }

    private Object[] parametersForTestFree(){
        return new Object[]{
                new Object[] {0, 0, true},
                new Object[] {100, 0, false},
                new Object[] {0, 100, false}
        };
    }
}
728x90
반응형

'JAVA' 카테고리의 다른 글

[JAVA] 정규 표현식(replaceAll)  (1) 2022.10.08
[JAVA] String / StringBuffer / StringBuilder 차이  (0) 2022.10.08