JUnit을 활용한 자바 단위 테스트(Unit Test) 코드 작성

Dodam·2023년 7월 27일
0

[기타]

목록 보기
6/8
post-thumbnail

비즈니스 요구사항

  • 컨트롤러: 웹 MVC의 컨트롤러
  • 서비스: 핵심 비즈니스 로직
  • 리포지토리:
    - 데이터베이스에 접근
    - 도메인 객체를 DB 저장하고 관리
  • 도메인:
    - 비즈니스 도매인 객체
    - 회원, 주문, 쿠폰 등 주로 DB에 저장되고 관리

단위 테스트 (Unit Test)

  • 단위 테스트(Unit Test)는 클래스나 메소드 단위에서 이루어지는 테스트이다.
  • 프로그래밍에서 모든 함수와 메서드에 대한 테스트 케이스(Test case)를 작성하여 각각의 기능이 의도한 대로 잘 동작하는지 검증하는 절차이다.
  • System.out.println()으로 하는 번거로운 디버깅이 필요 없으며, 디버깅 시간을 단축시킬 수 있다.

필요한 라이브러리

Java 단위 테스트 작성에는 크게 2가지 라이브러리가 사용된다.

  • JUnit5: 자바 단위 테스트를 위한 테스팅 프레임워크
  • AssertJ: 자바 테스트를 돕기 위해 다양한 문법을 지원하는 라이브러리

JUnit만으로도 단위 테스트를 작성할 수 있지만, JUnit에서 제공하는 assertEquals()와 같은 메소드는 AssertJ에 비해 가독성이 떨어지기 떄문에 보통 JUnit5와 AssertJ를 함께 사용한다.

JUnit과 관련된 Annotation의 특징

@Test
테스트할 메소드에 붙인다. 실행했을 때 에러가 없으면 JUnit 대시보드에 파란불이 뜨고, 에러가 있으면 빨간불이 뜬다.

@BeforeAll, @AfterAll
각각 테스트가 시작되기 전과 테스트가 끝난 후에 단 한 번만 실행된다.
static을 붙여야 한다.

@BeforeEach, @AfterEach
각각 테스트가 시작되기 전과 테스트가 끝난 후에 실행된다.
만약 테스트가 여러 개일 경우, 각 테스트마다 실행된다.

Assertions, AssertThat
특정 조건에 문제가 없다는 것을 단정하기 위해 사용하며, 조건에 부합하지 않으면 에러를 발생시킨다.

given / when / then 패턴

given-when-then 패턴이란 1개의 단위 테스트를 3가지 단계로 나누어 처리하는 패턴으로, 각각의 단계는 다음을 의미한다.

  • given (준비): 어떠한 데이터가 준비 되었을 때
  • when (실행): 어떠한 함수를 실행하면
  • then (검증): 어떠한 결과가 나와야 한다.

예외 검증

예외 검증으로 try-catch 방식과 assertThrows 방식이 존재한다.


회원 리포지토리 Test Case

개발한 기능을 테스트할 때 main 메서드를 통해서 실행하거나, 웹 어플리케이션의 컨트롤러를 통해서 해당 기능을 실행한다.
이러한 방법은 준비하고 실행하는 데 시간이 오래 걸리고 반복 실행과 여러 가지 테스트를 한 번에 실행하기 어렵다는 단점이 있다.

자바는 JUnit이라는 프레임워크로 테스트를 실행해서 이러한 문제를 해결한다.

테스트 코드의 핵심은 어떤 상황이 주어지고(Given), 이것을 실행했을 때(When), 예측된 결과(Then)가 나와야 한다.

한 번에 여러 가지 테스트를 실행하면 메모리 DB에 직전 테스트의 결과가 남아있을 수 있고, 그렇게 되면 이전 테스트가 다음 테스트에 영향을 미치게 된다.
따라서 @AfterEach 어노테이션을 작성하여 단위 테스트를 진행한다.

테스트 클래스는 관용적으로 테스트 할 클래스와 동일한 이름을 적고, 끝에 Test를 붙인다.

profile
⏰ Good things take time

0개의 댓글