Java 테스트 소개
Maria Milusheva
Senior Software Engineer
두 가지 핵심 개념:
Unit - 메서드와 같은 애플리케이션의 가장 작은 테스트 단위
Unit testing - 애플리케이션의 다른 부분과 격리하여 단일 "단위"의 정확성을 검증하는 테스트
메모:
단위 테스트는 큰 그림이 아닌 작은 로직에 초점을 둡니다
다른 테스트 유형은 큰 그림에 초점을 둡니다(예: 통합)
JUnit의 주요 용도가 단위 테스트이므로 이런 이름이 붙었습니다



assertTrue()는 표현식이 true인지 확인합니다: List<String> list = new ArrayList<>();
assertTrue(list.isEmpty()); // 오류 없음
assertFalse()는 반대를 확인합니다:List<String> list = new ArrayList<>();
list.add("A");
assertFalse(list.isEmpty()); // 오류 없음
null 변수는 NullPointerException을 유발할 수 있습니다!
변수가 null인지 여부를 확인하는 단언: assertNull(), assertNotNull()
흔한 사례: 외부에서 가져온 값이 null이 아님을 확인
Map<String, Integer> catalogue = new HashMap<>();
catalogue.put("item1", 10);
// 오류 없음
assertNotNull(catalogue.get("item1"));
assertNull(catalogue.get("item2"));
ArrayIndexOutOfBoundsException이 발생하는지 검증한다고 합시다:
public String getIndex(String[] array, int index) {
return array[index];
}
JUnit은 이를 검증하는 여러 방법을 제공합니다!
JUnit은 assertThrows()를 제공합니다. 다만 고급 Java 문법(람다식)을 사용합니다
대신 assertInstanceOf()를 이렇게 사용할 수 있습니다:
try {
getIndex(new String[]{}, 4);
} catch (Exception e) {
// 예외의 기대 클래스와 실제 예외를 전달
assertInstanceOf(ArrayIndexOutOfBoundsException.class, e);
}
일반적인 프로젝트에는 수백 개의 단위 테스트가 있습니다
가볍고 이해하기 쉬워야 합니다
실패 시 무엇이 문제인지 한눈에 알 수 있도록 이름이 명확해야 합니다
예: methodUnderTest_expectedBehavior_conditions()
Java 테스트 소개