Java 단위 테스트 작성에는 크게 2가지 라이브러리가 사용된다.
JUnit만으로도 단위 테스트를 작성할 수 있지만, JUnit에서 제공하는 assertEquals()와 같은 메소드는 AssertJ에 비해 가독성이 떨어지기 떄문에 보통 JUnit5와 AssertJ를 함께 사용한다.
@Test
테스트할 메소드에 붙인다. 실행했을 때 에러가 없으면 JUnit 대시보드에 파란불이 뜨고, 에러가 있으면 빨간불이 뜬다.
@BeforeAll, @AfterAll
각각 테스트가 시작되기 전과 테스트가 끝난 후에 단 한 번만 실행된다.
static을 붙여야 한다.
@BeforeEach, @AfterEach
각각 테스트가 시작되기 전과 테스트가 끝난 후에 실행된다.
만약 테스트가 여러 개일 경우, 각 테스트마다 실행된다.
Assertions, AssertThat
특정 조건에 문제가 없다는 것을 단정하기 위해 사용하며, 조건에 부합하지 않으면 에러를 발생시킨다.
given-when-then 패턴이란 1개의 단위 테스트를 3가지 단계로 나누어 처리하는 패턴으로, 각각의 단계는 다음을 의미한다.
예외 검증으로 try-catch 방식과 assertThrows 방식이 존재한다.
개발한 기능을 테스트할 때 main 메서드를 통해서 실행하거나, 웹 어플리케이션의 컨트롤러를 통해서 해당 기능을 실행한다.
이러한 방법은 준비하고 실행하는 데 시간이 오래 걸리고 반복 실행과 여러 가지 테스트를 한 번에 실행하기 어렵다는 단점이 있다.
자바는 JUnit이라는 프레임워크로 테스트를 실행해서 이러한 문제를 해결한다.
테스트 코드의 핵심은 어떤 상황이 주어지고(Given), 이것을 실행했을 때(When), 예측된 결과(Then)가 나와야 한다.
한 번에 여러 가지 테스트를 실행하면 메모리 DB에 직전 테스트의 결과가 남아있을 수 있고, 그렇게 되면 이전 테스트가 다음 테스트에 영향을 미치게 된다.
따라서 @AfterEach 어노테이션을 작성하여 단위 테스트를 진행한다.
테스트 클래스는 관용적으로 테스트 할 클래스와 동일한 이름을 적고, 끝에 Test를 붙인다.