ํ
์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋ค ๋ณด๋ฉด, ํ ๊ฐ์ ๋ฉ์๋์ ๋ํด์ ์ฌ๋ฌ ๊ฐ์ ํ
์คํธ๋ฅผ ์ํํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํ๋ค.
๊ท์น์ด ๋ง์์ง๋ ๊ฒฝ์ฐ๋ ํ
์คํธํ๊ณ ์ถ์ ๊ฐ์ด ๋ง์ ๊ฒฝ์ฐ ์ผ์ผ์ด ํ
์คํธ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ์๋ ํ๋ค ์ ์๋ค.
JUnit์์๋ ์ฌ๋ฌ ๊ฐ์ ํ
์คํธ๋ฅผ ํ ๋ฒ์ ์์ฑํ๊ธฐ ์ํ @ParameterizedTest ๋ผ๋ ์ด๋
ธํ
์ด์
์ ์ ๊ณตํ๋ค.
@Test ๋์ @ParameterizedTest ์ด๋
ธํ
์ด์
์ ์ ์ธํด์ฃผ๊ณ , ํ๋ผ๋ฏธํฐ๋ก ๋๊ฒจ์ค ๊ฐ๋ค์ ์ง์ ํด์ฃผ๋ฉด ๋๋๋ฐ, ํ๋ผ๋ฏธํฐ๋ฅผ ๋๊ฒจ์ฃผ๋ ์ด๋
ธํ
์ด์
์ด ์ฌ๋ฌ ์ข
๋ฅ๊ฐ ์๋ค.
ํ๋์ ํ
์คํธ์ ํ๋์ ์ธ์๋ฅผ ๋๊ฒจ์ฃผ๋ ๋ฐฉ๋ฒ
ํ
์คํธ์ ์ฃผ์
ํ ๊ฐ์ ์ด๋
ธํ
์ด์
์ ๋ฐฐ์ด๋ก ์ง์ ํ๋ค.
ํ
์คํธ๋ฅผ ์คํํ๋ฉด ๋ฐฐ์ด์ ์ํํ๋ฉด์, ํ
์คํธ ๋ฉ์๋์ ์ธ์๋ก ๋ฐฐ์ด์ ์ ์ฅ๋ ๊ฐ๋ค์ ์ฃผ์
ํ์ฌ ํ
์คํธํ๋ค.
@ValueSource์ ์ฌ์ฉํ ์ ์๋ ์๋ฃํ
byte, short, int, long, float, double, char, boolean
String, Class
@ ParameterizedTest
@ ValueSource (strings = {"" , " " })
void ์ ์ ๋ค์์ผ๋ก_User_์์ฑํ๊ธฐ (String userName ) {
assertThatThrownBy (() -> new User (userName ))
.isInstanceOf (IllegalArgumentException .class );
}
input ๊ฐ๊ณผ expect (๊ธฐ๋๊ฐ) ๊ฐ์ ์ธ์๋ก ๋ฐ๊ณ ์ถ์ ๊ฒฝ์ฐ ์ฌ์ฉํ๋ค.
value ๋งค๊ฐ๋ณ์๋ก ๊ฐ์ ๋๊ฒจ์ฃผ๋๋ฐ, ์ด ๋ "{input},{expect}"์ ํํ๋ก ๊ตฌ๋ถ์๊ฐ ์๋ ๋ฌธ์์ด๋ก ์
๋ ฅ์ ๋ฃ์ด์ค๋ค.
๊ธฐ๋ณธ ๊ตฌ๋ถ์๋ ์ฝค๋ง(',')์ด์ง๋ง, delimiter ๊ฐ์ ์ง์ ์ ์ํด์ ์ปค์คํ
๊ตฌ๋ถ์๋ฅผ ์ฌ์ฉํ ์๋ ์๋ค.
delimiter ๊ตฌ๋ถ์๋ String์ด ์๋ char ๊ฐ
@ CsvSource (value = {"1:2" , "3:4" }, delimiter = ':' )
String์ ๊ตฌ๋ถ์๋ก ๋ฃ๊ณ ์ถ๋ค๋ฉด delimiterString ๋งค๊ฐ๋ณ์๋ฅผ ์ด์ฉํด ๊ฐ์ ๋๊ฒจ์ค์ผ ํ๋ค.
@ CsvSource (value = {"1//2" , "3//4" }, delimiterString = "//" )
@ ParameterizedTest
@ CsvSource (value = {"1,2" , "2,4" , "3,6" })
void 2 _๊ณฑํ๊ธฐ_ํ
์คํธ (int input , int expected ) {
assertThat (multiplyBy2 (input )).isEqualTo (expected );
}
@NullSource, @EmptySource, @NullAndEmptySource
@NullSource๋ ํ
์คํธ ์ธ์๋ก null์, @EmptySource๋ ๋น ๊ฐ์, @NullAndEmptySource๋ null๊ณผ ๋น ๊ฐ์ ๋ชจ๋ ์ฃผ์
ํ๋ค.
์ด ๋ ์์ ๊ฐ (byte, short, int, long, float, double, char, boolean) ์ null์ด ๋ค์ด๊ฐ ์ ์์ผ๋ฏ๋ก ๋ฉ์๋์ ์ธ์๊ฐ ์์ ๊ฐ์ด๋ผ๋ฉด @NullSource, @NullAndEmptySource๋ ์ฌ์ฉ ๋ถ๊ฐ๋ฅํ๋ค.
@NullSource์ @EmptySource๋ฅผ ๋ ๋ค ์ฌ์ฉํ ๊ฒ์ @NullAndEmptySource์ ๊ฐ๋ค.
@ValueSource์ ๊ฐ์ด ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
@ ParameterizedTest
@ NullAndEmptySource
@ ValueSource (strings = {"" , " " })
void ์ ์ ๋ค์์ผ๋ก_User_์์ฑํ๊ธฐ (String name ) {
assertThatThrownBy (() -> new User (name ))
.isInstanceOf (IllegalArgumentException .class )
}
Enum ํด๋์ค์ ๋ชจ๋ ๊ฐ์ ์ฌ์ฉํ๋ ค๋ฉด @EnumSource ์์ Enum ํด๋์ค๋ง ์ ๋ฌํด์ฃผ๋ฉด ๋๊ณ , ํน์ ๊ฐ๋ง ํ์ํ ๊ฒฝ์ฐ value์ Enum ํด๋์ค๋ฅผ ๋ฃ์ด์ฃผ๊ณ , names์ ์ ํํ ๊ฐ์ ์ด๋ฆ์ ์ ๋ฌํด์ฃผ๋ฉด ๋๋ค.
์ด ๋ names๊น์ง ๊ฐ์ ๋ฃ์ผ๋ฉด ์ถ๊ฐ๋ก mode ๊ฐ์ ๋ฃ์ด์ค ์ ์๋ค.
์ง์ํ๋ mode๋ ๋ค์๊ณผ ๊ฐ๋ค.
INCLUDE
EXCLUDE
MATCH_ALL
MATCH_ANY
@ ParameterizedTest
@ EnumSource (value = Color .class , names = {"PINK" , "CORAL" })
void ์์์_๋ฒ ์ด์ค_์์_ํ
์คํธ (Color color ) {
assertThat (color .getBaseColor ()).isEqualTo (Color .RED );
}
์ ์ด๋
ธํ
์ด์
๋ค์ ๋ณต์กํ Object๋ฅผ ์ ๋ฌํ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํ๋ค.
@MethodSource๋ ๋ฉ์๋๋ฅผ ์ธ์๋ก ์ ๋ฌํด์ฃผ๋ฉด ๋ณต์กํ ์ธ์๋ฅผ ์ ๋ฌํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค.
@ ParameterizedTest
@ MethodSource ("provideBlankStrings" )
void ๋ฌธ์์ด_isBlank_ํ
์คํธ (String input , boolean expected ) {
assertThat (input .isBlank ()).isEqualTo (expected );
}
private static Stream <Arguments > provideBlankStrings () {
return Stream .of (
Arguments .of ("" , true ),
Arguments .of (" " , true ),
Arguments .of ("not blank" , false )
);
}
provideBlankStrings()๋ผ๋ ๋ฉ์๋๋ฅผ ์ ์ํ ๋ค, ํด๋น ๋ฉ์๋๋ฅผ @MethodSource๋ก ํ
์คํธ ๋ฉ์๋์ ๋๊ฒจ์ฃผ๋ ๋ฐฉ์
@MethodSource์ ์์ฑํ๋ ๋ฉ์๋ ์ด๋ฆ์ ์ธ์๋ก ์ ๊ณตํ๋ ค๋ ๋ฉ์๋ ์ด๋ฆ๊ณผ ๊ฐ์์ผ ํ๋ค.
์ธ์๋ก ์ ๋ฌํ๋ ค๋ ๋ฉ์๋๋ static ๋ฉ์๋์ฌ์ผ ํ๋ค.
@MethodSource์ ๋ฉ์๋ ์ด๋ฆ์ ์์ฑํด์ฃผ์ง ์์ผ๋ฉด JUnit์ด ํ
์คํธ ๋ฉ์๋ ๋ค์๊ณผ ๊ฐ์ ๋ฉ์๋๋ฅผ ์ฐพ์ ์ธ์๋ก ์ ๊ณตํ๋ค.