Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

일상기록

JUnit의 ParameterizedTest 중복 코드제거 본문

Test

JUnit의 ParameterizedTest 중복 코드제거

너 구 나 2023. 3. 28. 12:13

@ParameterizedTest 


 자바 플레이그라운드 with TDD, 클린 코드 과정중 중복코드 제거 관련된 문제이다.

public class SetTest {
    private Set<Integer> numbers;

    @BeforeEach
    void setUp() {
        numbers = new HashSet<>();
        numbers.add(1);
        numbers.add(1);
        numbers.add(2);
        numbers.add(3);
    }
    
    // Test Case 구현
}

  결과는 [1, 2, 3]으로 나온다. 이를 확인하기위해 contains() 매서드로 확인 하는 코드를 만들면 

@Test
    void contains() {
        assertThat(numbers.contains(1)).isTrue();
        assertThat(numbers.contains(2)).isTrue();
        assertThat(numbers.contains(3)).isTrue();
    }

 이렇게 만들었지만 계속해서 반복된 코드가 만들어진다. 이러한 반복되는 코드를 없애기 위해 @ParameterizedTest를 사용하면

 @ParameterizedTest
        @ValueSource(ints = {1, 2, 3})
        void setNumberTest(int number) {
            assertTrue(numbers.contains(number));
        }

이렇게 만들면 @ValueSorce 안의 매개변수 갯수만큼 돌면서 테스트를 진행한다.

Test 결과

테스트에서 값을 하나씩 넣어서 확인할때 반복되는 작업을 줄여줄 수 있다.

1, 2, 3에 대해서는 true로 통과하고 4, 5에 대해서는 false로 실패하는 코드로 만들고 싶다면 @CsvSource로 활용할 수 있다.

      @ParameterizedTest
            @CsvSource({"1", "2", "3", "4", "5"})
            void setNumberTest(String input) {
                int number = Integer.parseInt(input);
                assertTrue(numbers.contains(number));
            }

이런식으로도 가능하고 위의 코드처럼 @ValueSorce의  값에 4, 5를 추가해서 실행해도 똑같은 결과를 만들수 있다.

Test 결과

References

Guide to JUnit 5 Parameterized Tests 

'Test' 카테고리의 다른 글

자동차 경주 게임 구현  (0) 2023.04.04
문자열 덧셈 계산기 테스트  (0) 2023.04.03
숫자야구게임 구현 Java  (0) 2023.03.28
문자열 계산기 Test  (0) 2023.03.28
JUnit Test Code 공부  (0) 2023.03.28