JUnit5 - @ParameterizedTest, @ValueSource, @CsvSource

Junit

10/11/2021





@ParameterizedTest

JUnit5์—์„œ ์ถ”๊ฐ€๋œ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜์ด๋‹ค.

๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋‹จ์ผํ…Œ์‹œํŠธ๋ฅผ ์—ฌ๋Ÿฌ๋ฒˆ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋จผ์ € @ParameterizedTest ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” pom.xml / build.gradle ์— Junit-jupiter-params์˜์กด์„ฑ์„ ์ถ”๊ฐ€ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.


Maven ์˜์กด์„ฑ ์ถ”๊ฐ€

JAVA
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<version>5.7.0</version>
<scope>test</scope>
</dependency>

Gradle ์˜์กด์„ฑ ์ถ”๊ฐ€

JAVA
testCompile("org.junit.jupiter:junit-jupiter-params:5.7.0")


Example

JAVA
public Class Example{
private set<Integer> numbers;
@BeforeEach
void setUp() {
numbers = new HashSet<>();
numbers.add(1);
numbers.add(1);
numbers.add(2);
numbers.add(3);
}
}

@ValueSource๋ฅผ ํ™œ์šฉํ•œ ๋‹จ์ˆœ ๊ฐ’ ๋น„๊ต

numbers ๋ณ€์ˆ˜ ์•ˆ์— 1,2,3 ๊ฐ’์ด ๋“ค์–ด์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋‹จ์œ„ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•ด๋ณด์ž

JAVA
@Test
@DisplayName("numbers 1,2,3 ๊ฐ’์ด ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธ")
void contains() {
assertThat(numbers.contains(1)).isTrue();
assertThat(numbers.contains(2)).isTrue();
assertThat(numbers.contains(3)).isTrue();
}

์œ„์™€ ๊ฐ™์ด ์ž‘์„ฑํ–ˆ์„ ์‹œ์— asserThat ๋ฌธ์ด ์ค‘๋ณต๋˜์–ด ์ฝ”๋“œ๊ฐ€ ๊ธธ์–ด์ง„๋‹ค.


์ด๋ฅผ @ParameterizedTest๋ฅผ ํ™œ์šฉํ•ด์„œ ์ค‘๋ณต ์ฝ”๋“œ๋ฅผ ์ค„์—ฌ๋ณด์ž

JAVA
@ParameterizedTest
@ValueSource(ints = {1,2,3})
@DisplayName("numbers 1,2,3 ๊ฐ’์ด ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธ(์ค‘๋ณต์ œ๊ฑฐ)")
void is_SouldContainsNumberOneTwoThree(int num){
assertThat(numbers.contains(num)).isTrue();
}

@ValueSource๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฆฌํ„ฐ๋Ÿด ๊ฐ’์˜ ๋ฐฐ์—ด์„ ํ…Œ์ŠคํŠธ ๋ฉ”์„œ๋“œ๋กœ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค.

test result1

์œ„์˜ ํ…Œ์ŠคํŠธ์ผ€์ด์Šค์—์„œ๋Š” 1,2,3 ๊ฐ’์ด ์•„๋‹Œ ๋‹ค๋ฅธ ๊ฐ’์ด ๋“ค์–ด๊ฐ€๋ฉด ํ…Œ์ŠคํŠธ ์˜ค๋ฅ˜๊ฐ€ ๋‚œ๋‹ค.

Ture, False ๊ฐ’์œผ๋กœ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ…Œ์ŠคํŠธ์ผ€์ด์Šค๋ฅผ ์ž‘์„ฑํ•ด๋ณด์ž.



@CsvSource๋ฅผ ํ™œ์šฉํ•˜์—ฌ Ture, False ๊ฐ’ ๋ฐ˜ํ™˜ํ•˜๊ธฐ


JAVA
@DisplayName("์š”๊ตฌ์‚ฌํ•ญ3) 1,2,3 ๊ฐ’์ด๋ฉด Ture, 4,5๋ฉด Flase ๋ฐ˜ํ™˜")
@ParameterizedTest
@CsvSource(value = {"1,true","2,true","3,true","4,false","5,false"})
void contains_TrueOrFalse(int num, boolean expected) {
assertThat(numbers.contains(num)).isEqualTo(expected);
}

"1,true" ์—์„œ 1์€ int num, true๋Š” boolean expected ์˜ ํƒ€์ž…์œผ๋กœ์จ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌ๋œ๋‹ค.

@CsvSource ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ฝค๋งˆ',' ๊ฐ€ ๊ตฌ๋ถ„์ž์ด๋ฉฐ, delimiter ์†์„ฑ์„ ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด ๊ตฌ๋ถ„์ž๋ฅผ ์ง€์ •ํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค.

JAVA
@CsvSource(value = {"1:true","2:true","3:true","4:false","5:false"}, delimiter = ':')

test result1


๊ทธ ์™ธ์— @NullSource, @EmptySource, @EnumSource, @CsvFileSource, @MethodSource ๋“ฑ๊ณผ์˜ ์–ด๋…ธํ…Œ์ด์…˜์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.



์ถœ์ฒ˜ ๋ฐ ์ž์„ธํžˆ ๋ณด๊ธฐ โ†’ https://www.baeldung.com/parameterized-tests-junit-5


WRITTEN BY

Keep It Simple, Stupid