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