728x90
다음과 같은 Set 데이터가 주어졌을 때 요구사항을 만족해야 한다.
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
Set의 size() 메소드를 활용해 Set의 크기를 확인하는 학습테스트를 구현한다.
@Test
void setSize() {
/* Set의 size() 메소드를 활용해 Set의 크기를 확인하는 학습테스트를 구현한다. */
assertThat(numbers.size()).isEqualTo(3);
assertThat(numbers).hasSize(numbers.size());
}
요구사항 2
Set의 contains() 메소드를 활용해 1, 2, 3의 값이 존재하는지를 확인하는 학습테스트를 구현하려한다.
구현하고 보니 다음과 같이 중복 코드가 계속해서 발생한다.
JUnit의 ParameterizedTest를 활용해 중복 코드를 제거해 본다.
@Test
void contains() {
/* Set의 contains() 메소드를 활용해 1, 2, 3의 값이 존재하는지를 확인하는 학습테스트를 구현하려한다.
구현하고 보니 다음과 같이 중복 코드가 계속해서 발생한다.
JUnit의 ParameterizedTest를 활용해 중복 코드를 제거해 본다. */
assertThat(numbers.contains(1)).isTrue();
assertThat(numbers.contains(2)).isTrue();
assertThat(numbers.contains(3)).isTrue();
}
@ParameterizedTest
@ValueSource(ints = {1, 2, 3})
void containsTestByParameterizedTest(int valueSourceInt) {
assertThat(numbers.contains(valueSourceInt)).isTrue();
}
요구사항 3
요구사항 2는 contains 메소드 결과 값이 true인 경우만 테스트 가능하다. 입력 값에 따라 결과 값이 다른 경우에 대한 테스트도 가능하도록 구현한다.
예를 들어 1, 2, 3 값은 contains 메소드 실행결과 true, 4, 5 값을 넣으면 false 가 반환되는 테스트를 하나의 Test Case로 구현한다.
@ParameterizedTest
@CsvSource(value = {"1:true", "2:true", "3:true", "4:false", "5:false"}, delimiter = ':')
void containsTestByCsvSource(int csvSourceInt, boolean csvSourceBoolean) {
/* 요구사항 2는 contains 메소드 결과 값이 true인 경우만 테스트 가능하다. 입력 값에 따라 결과 값이 다른 경우에 대한 테스트도 가능하도록 구현한다.
예를 들어 1, 2, 3 값은 contains 메소드 실행결과 true, 4, 5 값을 넣으면 false 가 반환되는 테스트를 하나의 Test Case로 구현한다. */
assertThat(numbers.contains(csvSourceInt)).isEqualTo(csvSourceBoolean);
}
Guide to JUnit 5 Parameterized Tests 문서 참고
Introduction to AssertJ 문서 참고
728x90
'개발 교육 > 플레이그라운드 with TDD, 클린코드' 카테고리의 다른 글
TDD/리팩토링 실습 - 문자열 덧셈 계산기 (0) | 2022.03.09 |
---|---|
숫자야구게임 다시 구현 - 피드백 적용 후 (0) | 2022.03.06 |
숫자야구게임 구현 - 피드백 적용 전 (0) | 2022.03.06 |
단위 테스트 실습 - 문자열 계산기 (0) | 2022.03.02 |
AssertJ 맛보기(1) (0) | 2022.03.01 |