일상기록
JUnit의 ParameterizedTest 중복 코드제거 본문
@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 안의 매개변수 갯수만큼 돌면서 테스트를 진행한다.
테스트에서 값을 하나씩 넣어서 확인할때 반복되는 작업을 줄여줄 수 있다.
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를 추가해서 실행해도 똑같은 결과를 만들수 있다.
References
'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 |