CodeGym /Java Course /๋ชจ๋“ˆ 3 /Junit์˜ ๋งค๊ฐœ๋ณ€์ˆ˜ํ™”๋œ ํ…Œ์ŠคํŠธ

Junit์˜ ๋งค๊ฐœ๋ณ€์ˆ˜ํ™”๋œ ํ…Œ์ŠคํŠธ

๋ชจ๋“ˆ 3
๋ ˆ๋ฒจ 3 , ๋ ˆ์Šจ 4
์‚ฌ์šฉ ๊ฐ€๋Šฅ

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
}
์ฝ”๋ฉ˜ํŠธ
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION