
패스트 캠퍼스 김은호 강사님 강의를 듣다가 테스트 함수의 이름을 작성하는 나름의 규칙을 가지고 계신 것 같아 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의 구분은 스네이크 케이스로, 각 영역 내에서의 단어 구분을 카멜 케이스로 한 것이 신선하네요. 실무에 투입된다면 팀에서 약속된 규칙으로 테스트 코드 네이밍을 하면 될 것 같습니다.