티스토리 뷰

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();
    }
}

 

전체 소스

https://github.com/seogineer/spring-junit-test

'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
댓글
Total
Today
Yesterday
링크
Apple 2023 맥북 프로 14 M3, 스페이스 그레이, M3 8코어, 10코어 GPU, 512GB, 8GB, 한글