JUnit5 - @ParameterizedTest, @ValueSource, @CsvSource
Junit
10/11/2021
@ParameterizedTest
JUnit5์์ ์ถ๊ฐ๋ ์๋ก์ด ๊ธฐ๋ฅ ์ค ํ๋์ด๋ค.
๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํด์ ๋จ์ผํ ์ํธ๋ฅผ ์ฌ๋ฌ๋ฒ ์คํํ ์ ์๋ค.
๋จผ์ @ParameterizedTest ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ pom.xml
/ build.gradle
์ Junit-jupiter-params
์์กด์ฑ์ ์ถ๊ฐํด์ฃผ์ด์ผ ํ๋ค.
Maven ์์กด์ฑ ์ถ๊ฐ
<dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-params</artifactId> <version>5.7.0</version> <scope>test</scope></dependency>
Gradle ์์กด์ฑ ์ถ๊ฐ
testCompile("org.junit.jupiter:junit-jupiter-params:5.7.0")
Example
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 ๊ฐ์ด ๋ค์ด์๋์ง ํ์ธํ๋ ๋จ์ํ ์คํธ๋ฅผ ์์ฑํด๋ณด์
@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๋ฅผ ํ์ฉํด์ ์ค๋ณต ์ฝ๋๋ฅผ ์ค์ฌ๋ณด์
@ParameterizedTest @ValueSource(ints = {1,2,3}) @DisplayName("numbers 1,2,3 ๊ฐ์ด ์กด์ฌํ๋์ง ํ์ธ(์ค๋ณต์ ๊ฑฐ)") void is_SouldContainsNumberOneTwoThree(int num){ assertThat(numbers.contains(num)).isTrue(); }
@ValueSource๋ฅผ ์ฌ์ฉํ์ฌ ๋ฆฌํฐ๋ด ๊ฐ์ ๋ฐฐ์ด์ ํ ์คํธ ๋ฉ์๋๋ก ์ ๋ฌํ ์ ์๋ค.
์์ ํ ์คํธ์ผ์ด์ค์์๋ 1,2,3 ๊ฐ์ด ์๋ ๋ค๋ฅธ ๊ฐ์ด ๋ค์ด๊ฐ๋ฉด ํ ์คํธ ์ค๋ฅ๊ฐ ๋๋ค.
Ture, False ๊ฐ์ผ๋ก ๋ฐํํ๋ ํ ์คํธ์ผ์ด์ค๋ฅผ ์์ฑํด๋ณด์.
@CsvSource๋ฅผ ํ์ฉํ์ฌ Ture, False ๊ฐ ๋ฐํํ๊ธฐ
@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 ์์ฑ์ ์ถ๊ฐํด์ฃผ๋ฉด ๊ตฌ๋ถ์๋ฅผ ์ง์ ํด์ค ์ ์๋ค.
@CsvSource(value = {"1:true","2:true","3:true","4:false","5:false"}, delimiter = ':')
๊ทธ ์ธ์ @NullSource, @EmptySource, @EnumSource, @CsvFileSource, @MethodSource ๋ฑ๊ณผ์ ์ด๋ ธํ ์ด์ ์ ํ์ฉํ ์ ์๋ค.
์ถ์ฒ ๋ฐ ์์ธํ ๋ณด๊ธฐ โ https://www.baeldung.com/parameterized-tests-junit-5