티스토리 뷰
String 클래스에 대한 학습 테스트
- 요구사항1
- "1,2"을 , 로 split 했을 때 1과 2로 잘 분리되는지 확인하는 학습 테스트를 구현한다.
- "1"을 , 로 split 했을 때 1만을 포함하는 배열이 반환되는지에 대한 학습 테스트를 구현한다.
@Test
@DisplayName("요구사항1 - 1")
void test1_1(){
String target = "1,2";
String[] temp = target.split(",");
assertThat(temp).contains("1", "2");
}
@Test
@DisplayName("요구사항1 - 2")
void test1_2(){
String target = "1";
String[] temp = target.split(",");
assertThat(temp).containsExactly("1");
}
- 요구사항2
- "(1,2)" 값이 주어졌을 때 String의 substring() 메소드를 활용해 () 을 제거하고 "1,2"를 반환 하도록 구현한다.
@Test
@DisplayName("요구사항2")
void test2(){
String target = "(1,2)";
String result = target.substring(1, 4);
assertEquals("1,2", result);
}
- 요구사항3
- "abc" 값이 주어졌을 때 String의 charAt() 메소드를 활용해 특정 위치의 문자를 가져오는 학습 테스트를 구현한다.
- String의 charAt() 메소드를 활용해 특정 위치의 문자를 가져올 때 위치 값을 벗어나면 StringIndexOutOfBoundsException이 발생하는 부분에 대한 학습 테스트를 구현한다.
@Test
@DisplayName("요구사항3 - 1")
void test3_1(){
String target = "abc";
char result = target.charAt(0);
char result2 = target.charAt(1);
char result3 = target.charAt(2);
assertEquals('a', result);
assertEquals('b', result2);
assertEquals('c', result3);
}
@Test
@DisplayName("요구사항3 - 2")
void test3_2(){
assertThatThrownBy(() -> {
String target = "abc";
char result = target.charAt(3);
}).isInstanceOf(IndexOutOfBoundsException.class)
.hasMessageContaining("String index out of range: 3");
}
Set Collection에 대한 학습 테스트
- 다음과 같은 데이터가 주어졌을 때 요구사항을 만족해야 한다.
private Set<Integer> numbers;
@BeforeEach
void setUp() {
numbers = new HashSet<>();
numbers.add(1);
numbers.add(1);
numbers.add(2);
numbers.add(3);
}
- 요구사항1
- Set의 size() 메소드를 활용해 Set의 크기를 확인하는 학습 테스트를 구현한다.
@Test
@DisplayName("요구사항1")
void test1(){
assertEquals(3, numbers.size());
}
- 요구사항2
- Set의 contains() 메소드를 활용해 1, 2, 3의 값이 존재하는지를 확인하는 학습 테스트를 구현하려한다.
- JUnit의 ParameterizedTest를 활용해 중복 코드를 제거해 본다.
@ParameterizedTest
@ValueSource(ints = {1, 2, 3})
@DisplayName("요구사항2")
void test2(int param){
assertThat(numbers.contains(param)).isTrue();
}
- 요구사항3
- 요구사항 2는 contains 메소드 결과 값이 true인 경우만 테스트 가능하다. 입력 값에 따라 결과값이 다른 경우에 대한 테스트도 가능하도록 구현한다.
- 예를 들어 1, 2, 3 값은 contains 메소드 실행결과 true, 4, 5 값을 넣으면 false가 반환되는 테스트를 하나의 Test Case로 구현한다.
@ParameterizedTest
@CsvSource(value = {"1", "2", "3", "4", "5"})
@DisplayName("요구사항3")
void test3(int input) {
if(input < 4){
assertThat(numbers.contains(input)).isTrue();
} else {
assertThat(numbers.contains(input)).isFalse();
}
}
전체 소스
'Language > Java' 카테고리의 다른 글
멀티스레드 프로그래밍 (0) | 2022.10.19 |
---|---|
Exception 클래스 (0) | 2022.10.18 |
자바 자료구조 (0) | 2022.07.04 |
Overflow가 발생하면 어떻게 될까? (0) | 2022.04.27 |
JVM의 Garbage Collector (0) | 2021.04.09 |
댓글