JunitParams

https://www.petrikainulainen.net/programming/testing/junit-5-tutorial-writing-parameterized-tests/

ํ…Œ์ŠคํŠธ์—์„œ ์ค‘๋ณต ์ฝ”๋“œ๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ

   @Test
    public void testOffline(){
        //Given
        Event event = Event.builder()
                .location("๊ฐ•๋‚จ์—ญ")
                .build();
        //When
        event.update();
        //Then
        assertThat(event.isOffline()).isTrue();

        //Given
        event = Event.builder()
                .build();
        //When
        event.update();
        //Then
        assertThat(event.isOffline()).isFalse();
    }
}

์™€ ๊ฐ™์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋งŒ ๋ฐ”๋€Œ๋Š” ์ƒํ™ฉ์—์„œ ์ฝ”๋“œ ์ค‘๋ณต์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋‹ค.

์›๋ž˜ JUnit๋ฉ”์„œ๋“œ๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๊ฐ–์ง€ ๋ชปํ•˜๋Š”๋ฐ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๊ฐ–์„์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.

dependency ์ถ”๊ฐ€

<dependency>
  <groupId>pl.pragmatists</groupId>
  <artifactId>JUnitParams</artifactId>
  <version>1.1.1</version>
  <scope>test</scope>
</dependency>

์‚ฌ์šฉ๋ฒ•

Testํ•  class์— @RunWith(JUnitParamsRunner.class)์„ ์ถ”๊ฐ€ํ›„ ํ…Œ์ŠคํŠธํ•  ๋ฉ”์„œ๋“œ์— @CsvSource({})์„ ์ด์šฉํ•ด ํŒŒ๋ผ๋ฏธํ„ฐ ์ด์šฉ

@RunWith(JunitParamsRunner.class)
class EventTest{
    @ParameterizedTest(name="{index}๋ฒˆ์งธ ์‹คํ–‰ : basePrice={0},maxPrice={1},isFree={2}")
    @CsvSource({
            "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);
    }
}

@CsvSource์–ด๋…ธํ…Œ์ด์…˜ ํŒŒ๋ผ๋ฏธํ„ฐ ์•ˆ์˜ ๋ฐฐ์—ด์ˆ˜ ๋งŒํผ ํ…Œ์ŠคํŠธ๊ฐ€ ์ง„ํ–‰๋˜๊ณ  @Test์–ด๋…ธํ…Œ์ด์…˜์ด ์•„๋‹Œ @ParameterizedTest ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜๊ณ  ์•ˆ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ name์„ ์ฃผ์–ด ํ…Œ์ŠคํŠธ ์ด๋ฆ„์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ…Œ์ŠคํŠธ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋ฌธ์ž์—ด๋กœ ์ž…๋ ฅํ•ด Type Safeํ•˜์ง€ ์•Š์•„ ๊ฑฑ์ •๋ ๋•Œ

๊ฐ์ฒด ๋ฐฐ์—ด์„ returnํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋„˜๊ฒจ์ฃผ์–ด ์‚ฌ์šฉ

    //static์ด ์žˆ์–ด์•ผ ๋™์ž‘ํ•œ๋‹ค.
    private static Object[] parametersForTestOffline(){
        return new Object[]{
                new Object[] {"๊ฐ•๋‚จ์—ญ",true},
                new Object[] {"",false},
                new Object[] {"  ",false},
                new Object[] {null,false}
        };
    }

   //Type Safeํ•˜๊ฒŒ Method์ด์šฉํ•ด์„œ ํŒŒ๋ฆฌ๋ฏธํ„ฐ ์ „๋‹ฌ
    @ParameterizedTest(name="{index}๋ฒˆ์งธ ์‹คํ–‰ : location={0}, isOffline ={1}")
    @MethodSource("parametersForTestOffline")
    public void testOffline(String location,boolean isOffline){
        //Given
        Event event = Event.builder()
                .location(location)
                .build();
        //When
        event.update();
        //Then
        assertThat(event.isOffline()).isEqualTo(isOffline);
    }

์ด๋•Œ @MethodSource์–ด๋…ธํ…Œ์ด์…˜์„ ์ด์šฉํ•˜์—ฌ ๋ฉ”์„œ๋“œ๋ฅผ ๋งตํ•‘์‹œ์ผœ์ฃผ๋ฉด๋œ๋‹ค.

์™ธ๊ตญ์—์„  ๊ฐ์ฒด ๋ฐฐ์—ด๋ณด๋‹ค๋Š” Stream์„ ์ฃผ๋กœ ์ด์šฉ

 private static Stream<Arguments> TestOffline(){
        return Stream.of(
                Arguments.of("๊ฐ•๋‚จ์—ญ",true),
                Arguments.of("",false),
                Arguments.of("  ",false),
                Arguments.of(null,false)
        );
    }

Last updated