해당 글은 NEXTSTEP 자바 플레이그라운드 with TDD, 클린 코드를 통해서 새롭게 배우고 내용을 기록한 글입니다.
contains(String values)
- 배열로 반환하는 값의 경우 assertj의 contains()를 활용해 반환 값이 맞는지 검증
@Test
void split1() {
String actual = "1,2";
String[] actualSplit = actual.split(",");
assertThat(actualSplit).contains("1");
assertThat(actualSplit).contains("2");
}
containsExactly(String values)
- 배열로 반환하는 값의 경우 assertj의 containsExactly()를 활용해 반환 값이 맞는지 검증
@Test
void split2() {
String actual = "1";
String[] actualSplit = actual.split(",");
assertThat(actualSplit).containsExactly("1");
}
Exception별 메서드
- chatAt() 메서드는 특정 위치의 문자를 가져올 때, 위치가 벗어나면 Exception(StringIndexOutOfBoundsException)을 발생시킨다.
- 이에 대한 학습 테스트를 구현한다. 아래는 JUnit에서 Exception별 제공하는 메서드
- assertThatIllegalArgumentException()
- assertThatIllegalStateException()
- assertThatIOException()
- assertThatNullPointerException()
@Test
@DisplayName("문자열의 최대 인덱스인 length() - 1 보다 큰 index를 통해 문자를 가져올때 발생하는 Exception 테스트")
void chatAt2() {
String actual = "abc";
assertThatExceptionOfType(StringIndexOutOfBoundsException.class)
.isThrownBy(() -> { actual.charAt(actual.length());})
.withMessageMatching(String.format("String index out of range: %s", actual.length()));
}
ParameterizedTest를 활용한 중복 코드 제거
- Set의 contains() 메서드를 활용해 1,2,3 의 값이 존재하는지 확인하는 테스트
- assertThat(numbers.contains(1)).isTrue();
- assertThat(numbers.contains(2)).isTrue();
- ..
- 반복되는 코드로 인해서 ParameterizedTest 어노테이션을 활용한 중복 코드 제거
@BeforeEach
void setUp() {
numbers = new HashSet<>();
numbers.add(1);
numbers.add(1);
numbers.add(2);
numbers.add(3);
}
@ParameterizedTest
@ValueSource(ints = {1,2,3})
void contains(int number) {
assertTrue(numbers.contains(number));
}
ParameterizedTest와 CsvSource 어노테이션을 활용한 테스트
- 입력 값에 따라 결과 값이 다른 경우에 대한 테스트도 가능하도록 구현
- 예를 들어 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 contains(int input, Boolean expected) {
assertThat(numbers.contains(input)).isEqualTo(expected);
}
'Test Code' 카테고리의 다른 글
콘솔 기반 UI 테스트를 어떻게 해야할까? (0) | 2023.10.20 |
---|---|
[JUnit] 테스트하기 어려운 코드를 테스트 하기 쉬운 코드로 (0) | 2023.04.22 |
[JUnit] AssertJ 라이브러리의 문자열 테스트와 숫자 테스트의 메서드 (0) | 2023.04.14 |
[JUnit] 스트림(Stream)을 이용한 JUnit기반 테스트 코드 작성 (0) | 2023.04.14 |
[Java] JUnit을 이용한 테스트 및 리팩토링 (0) | 2023.03.02 |