JUnit 5를 사용한 Java 단위 테스트 - TestCode (3)공부방2023. 6. 28. 06:06
Table of Contents
728x90
728x90
서론
본 포스팅은 아래의 인강을 듣고, 추가 공부가 필요한 내용들을 포함하여 정리한 포스팅입니다.
JUnit
JUnit에서 제공하는 assertEquals()와 같은 메서드는 AssertJ가 제공하는 메서드에 비해 가독성이 떨어지기 때문에, Java 애플리케이션에서 단위 테스트를 위해 JUnit5와 AssertJ를 조합하여 많이 사용한다.
- JUnit5 : 자바 단위 테스트를 돕기 위한 테스팅 프레임워크
- AssertJ : 테스트 코드 작성을 돕는 다양한 API를 지원하는 라이브러리로, 메서드 체이닝 지원
아래는 JUnit과 AssertJ의 공식 문서
작성 예시
아래의 Food 인터페이스를 상속받는 Pizza클래스를 만들었다.
public class Pizza implements Food{
@Override
public String getName() {
return "피자";
}
@Override
public int getPrice() {
return 10000;
}
}
class PizzaTest {
@Test
void getName(){
final Pizza pizza = new Pizza();
assertThat(pizza.getName()).isEqualTo("피자");
}
@Test
void getAge(){
final Pizza pizza = new Pizza();
assertThat(pizza.getAge()).isEqualTo(10000);
}
}
테스트에 성공 했다면 아래처럼 파란 체크표시가 나타난다.
Given / When / Then 패턴
단위 테스트는 given-when-then 패턴으로 작성한다. 1개의 단위 테스트를 3가지 단계로 나누어 처리하는 패턴이다.
- given(준비) : 데이터를 입력한 뒤
- when(실행) : 실행을 하면
- then(검증) : 어떠한 결과가 나와야 한다.
위의 패턴을 바탕으로 다시 위의 테스트 코드를 수정해보자.
class PizzaTest {
@Test
void getName(){
// given
final Pizza pizza = new Pizza();
final String chkName = "피자"
// when
final String realName = pizza.getName();
// then
assertThat(pizza.getName()).isEqualTo(realName);
}
@Test
void getPrice(){
// given
final Pizza pizza = new Pizza();
final int chkPrice = 10000
// when
final int realPrice = pizza.getPrice();
// then
assertThat(pizza.getPrice()).isEqualTo(realPrice);
}
}
테스트 케이스 세분화
요구사항이 실제 구현할 때의 요구사항과 정확히 일치하는지, 암묵적이거나 드러나지 않은 요구사항들이 있는지 항상 고민해야 한다. 위의 코드를 예시로 Food를 주문할 때를 생각해 보자.
- 해피 케이스 : 요구사항대로 피자를 2개 선택
- 예외 케이스 : 만약 피자를 0개, 혹은 -1개 입력했다면?
상식적으로 음식점에서, 음식을 0개나 -1개 주문하는 상황은 말이 안된다. 당연한 상식이기에 요구사항에 드러나지 않은 상황이라고 할 수 있다. 이런 상황들을 모두 고려한 테스트를 위해서 경계값 테스트가 중요하다. 여기서 경계값이란 범위, 구간, 날짜 등을 말한다.
테스트하기 어려운 영역
- 변수를 선언할 때마다 다른 값에 의존하는 코드(input) - now(), random(), 전역변수/함수, 사용자 입력 등
- 테스트 영역 외부에 영향을 주는 코드(output) - 표준 출력, 메세지 발송, 데이터베이스에 기록 등
참조
항상 너무 좋은 글을 써주시는 망나니 개발자님 (given - when - then 패턴)
관련 포스팅
728x90
300x250
@mag1c :: 꾸준히 재밌게
2023.04 ~ 백엔드 개발자의 기록
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!