JUnit Test Function Naming Convention

h.Im·2024년 9월 2일

Springboot 기초

목록 보기
12/17
post-thumbnail

패스트 캠퍼스 김은호 강사님 강의를 듣다가 테스트 함수의 이름을 작성하는 나름의 규칙을 가지고 계신 것 같아 JUnit Test Function Naming Convention에 대해 알아보는 포스팅을 작성해 보겠습니다.
네이밍 규칙의 Best Practice는 https://www.baeldung.com/java-unit-testing-best-practices 을 참고하였습니다.


테스트 케이스 명명 규칙

테스트 이름은 이름만 보고도 테스트의 동작과 기대 사항을 이해할 수 있어야 합니다. 이름의 가독성을 위해 이름에도 given when then 패턴을 적용하는 것이 좋습니다.

package org.example.logic;

import java.util.ArrayList;
import java.util.List;

public class BubbleSort<T extends Comparable<T>> {
    public List<T> sort(List<T> list) {
        List<T> output = new ArrayList<>(list);

        for (int i = output.size() - 1; i > 0; i--) {
            for (int j = 0; j < i; j++) {
                if (output.get(j).compareTo(output.get(j+1)) > 0) {
                    T temp = output.get(j);
                    output.set(j, output.get(j+1));
                    output.set(j + 1, temp);
                }
            }
        }

        return output;
    }
}

위와 같이 버블 소트를 수행하는 자바 코드를 작성했다고 하면,

package org.example.logic;

import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

import java.util.List;

import static org.junit.jupiter.api.Assertions.assertEquals;

class BubbleSortTest {

    @DisplayName("버블소트 - 리스트를 넣으면 정렬된 결과를 보여준다")
    @Test
    void givenList_WhenExecuting_ThenReturnSortedList() {
        // given
        BubbleSort<Integer> bubbleSort = new BubbleSort<>();
        // when
        List<Integer> actual = bubbleSort.sort(List.of(3, 2, 4, 5, 1));
        // then
        assertEquals(List.of(1,2,3,4,5), actual);
    }
}

위와 같이 테스트 코드를 작성할 수 있습니다. 김은호 강사님도 이름에 given when then 패턴을 적용했고, 테스트 함수 내에서도 주석으로 영역을 분리했네요. 이름만 보고도

  • given: 리스트가 주어졌을 때
  • when: 실행이 되면
  • then: 정렬된 리스트가 반환된다.

이런 정보를 알 수 있습니다.
given when then의 구분은 스네이크 케이스로, 각 영역 내에서의 단어 구분을 카멜 케이스로 한 것이 신선하네요. 실무에 투입된다면 팀에서 약속된 규칙으로 테스트 코드 네이밍을 하면 될 것 같습니다.

0개의 댓글