5.1 @ParameterizedTest ์ฃผ์
๋๋ก๋ ๋ค๋ฅธ ๋งค๊ฐ๋ณ์(๋ค๋ฅธ ๊ฐ, ๋ค๋ฅธ ์ ๋ ฅ ๋งค๊ฐ๋ณ์, ๋ค๋ฅธ ์ฌ์ฉ์ ์ด๋ฆ)๋ฅผ ์ฌ์ฉํ์ฌ ํ ์คํธ๋ฅผ ์ฌ๋ฌ ๋ฒ ํธ์ถํ๊ธฐ๋ฅผ ์ํ ์๋ ์์ต๋๋ค. JUnit์ ์ถ์ ๋ ์ฝ๊ฒ ๋ง๋๋ ๊ฒ์ ๋ชฉํ๋ก ํ๋ฏ๋ก ์ด ๊ฒฝ์ฐ์๋ ๋งค๊ฐ๋ณ์ํ๋ ํ ์คํธ์ ๊ฐ์ ๊ฒ์ด ์์ต๋๋ค.
๋งค๊ฐ๋ณ์ํ๋ ํ
์คํธ๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋ค์์ ํ๋ ์ด์์ ์ข
์์ฑ์ ์ถ๊ฐํด์ผ ํฉ๋๋ค pom.xml
.
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<version>5.8.2</version>
<scope>test</scope>
</dependency>
๊ทธ๋ฐ ๋ค์ ์๋ฅผ ๊ณ ๋ คํ ์ ์์ต๋๋ค.
@ParameterizedTest
@ValueSource(ints = { 1, 2, 3 })
void testMethod(int argument) {
//test code
}
@ParameterizedTest
@ValueSource(ints = { 1, 2, 3 })
void testMethodWithAutoboxing(Integer argument) {
//test code
}
๊ฐ ํ ์คํธ ๋ฉ์๋๋ 3๋ฒ ํธ์ถ๋๋ฉฐ ํธ์ถ๋ ๋๋ง๋ค ๋ค๋ฅธ ๋งค๊ฐ๋ณ์๊ฐ ์ ๋ฌ๋ฉ๋๋ค. ๊ฐ์ ๋ค๋ฅธ ์ฃผ์์ธ @ValueSource๋ฅผ ์ฌ์ฉํ์ฌ ์ค์ ๋ฉ๋๋ค . ๊ทธ๋ฌ๋ ๊ทธ๊ฒ์ ๋ํด ๋ ๋งํ ํ์๊ฐ ์์ต๋๋ค.
5.2 @ValueSource ์ฃผ์
@ValueSource ์ฃผ์์ ํ๋ฆฌ๋ฏธํฐ๋ธ ๋ฐ ๋ฆฌํฐ๋ด ์์ ์ ์ ํฉํฉ๋๋ค. ์ผํ๋ก ๊ตฌ๋ถ๋ ๋งค๊ฐ ๋ณ์ ๊ฐ์ ๋์ดํ๋ฉด ๊ฐ ๊ฐ์ ๋ํด ํ ์คํธ๊ฐ ํ ๋ฒ ํธ์ถ๋ฉ๋๋ค.
@ParameterizedTest
@ValueSource(ints = { 1, 2, 3 })
void testMethodWithAutoboxing(Integer argument) {
//test code
}
๊ทธ๋ฌ๋ ๋ง์ด๋์ค๋ ์์ต๋๋ค. ์ด ์ฃผ์์ null์ ์ง์ํ์ง ์์ผ๋ฏ๋ก @NullSource ๋ผ๋ ํน๋ณํ ๋ฒํ๋ชฉ์ ์ฌ์ฉํด์ผ ํฉ๋๋ค . ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
@ParameterizedTest
@NullSource
void testMethodNullSource(Integer argument) {
assertTrue(argument == null);
}
5.3 @EnumSource ์ฃผ์
ํน์ Enum์ ๋ชจ๋ ๊ฐ์ ๋ฉ์๋์ ์ ๋ฌํ๋ ํน์ ์ฃผ์ @EnumSource ๋ ์์ต๋๋ค . ์์ฉ ํ๋ก๊ทธ๋จ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
enum Direction {
EAST, WEST, NORTH, SOUTH
}
@ParameterizedTest
@EnumSource(Direction.class)
void testWithEnumSource(Direction d) {
assertNotNull(d);
}
5.4 @MethodSource ์ฃผ์
๊ทธ๋ฌ๋ ๊ฐ์ฒด๋ฅผ ๋งค๊ฐ ๋ณ์๋ก ์ ๋ฌํ๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ ๋๊น? ํนํ ๋ณต์กํ ๊ตฌ์ฑ ์๊ณ ๋ฆฌ์ฆ์ด ์๋ ๊ฒฝ์ฐ. ์ด๋ ๊ฒ ํ๋ ค๋ฉด ํด๋น ๊ฐ์ ๋ชฉ๋ก(Stream)์ ๋ฐํํ๋ ํน์ ๋์ฐ๋ฏธ ๋ฉ์๋๋ฅผ ์ง์ ํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
์:
@ParameterizedTest
@MethodSource("argsProviderFactory")
void testWithMethodSource(String argument) {
assertNotNull(argument);
}
static Stream<String> argsProviderFactory() {
return Stream.of("one", "two", "three");
}
์ธ์๊ฐ ์ฌ๋ฌ ๊ฐ์ธ ๋งค๊ฐ๋ณ์ํ๋ ํ ์คํธ
๋ฌผ๋ก ๋ฉ์๋์ ์ฌ๋ฌ ๋งค๊ฐ ๋ณ์๋ฅผ ์ ๋ฌํ๋ ค๋ ๊ฒฝ์ฐ ์ด๋ป๊ฒ ํด์ผ ํ ์ง ์ด๋ฏธ ๊ถ๊ธํ์ ๊ฒ์ ๋๋ค. ์ด์ ๋ํ ๋งค์ฐ ๋ฉ์ง @CSVSource ์ฃผ์์ด ์์ต๋๋ค . ์ผํ๋ก ๊ตฌ๋ถ๋ ๋ฉ์๋ ๋งค๊ฐ๋ณ์์ ๊ฐ์ ๋์ดํ ์ ์์ต๋๋ค.
์:
@ParameterizedTest
@CsvSource({
"alex, 30, Programmer, Working",
"brian, 35, Tester, Working",
"charles, 40, manager, kicks"
})
void testWithCsvSource(String name, int age, String occupation, String status) {
//method code
}
GO TO FULL VERSION