Spring Boot는 Application을 Test하기 위한 Tool과 Annotation을 제공한다.
Spring-boot-starter-test 스타터에 테스트를 위한 도구가 모여 있다.
스프링 부트 스타터 테스트 목록 | |
JUnit | 자바 프로그래밍 언어용 단위 테스트 프레임워크 |
Spring Test & Spring Boot Test | 스프링 부트 애플리케이션을 위한 통합 테스트 지원 |
AssertJ | 검증문인 어설션을 작성하는데 사용되는 라이브러리 |
Hamcrest | 표현식을 보다 이해하기 쉽게 만드는데 사용되는 Matcher 라이브러리 |
JSONassert | JSON용 어설션 라이브 러리 |
JsonPath | JSON 데이터에서 특정 데이터를 선택하고 검색하기 위한 라이브러리 |
여기 중 JUnit과 AssertJ를 가장 많이 사용한다.
🌳 < JUnit 이란 ? > 🌳
Junit은 Java 단위 테스트 프레임워크이다. 단위 테스트란, 작성한 코드가 의도대로 작동하는지 작은 단위로 검증하는 것을 의미한다. 이때 단위는 보통 메서드가 된다. JUnit을 사용하면 단위 테스트를 작성하고 테스트하는데 도움을 준다.
< 특징 >
1) @Test Annotation으로 메서드를 호출할 때마다 새 인스턴스를 생성, 독립 테스트가 가능하다.
2) 예상 결과를 검증하는 Assertion method 제공
< Junit으로 단위 테스트 코드 만들어보기 >
① : JUnitTest File을 만든다. [ src -> test -> java] 폴더에 JUnitTest.java 파일을 생성하고 코드를 따라 작성해보자.
< Code 설명 >
@DisplayName : 테스트 이름 정해주기.
@Test : 테스트를 수행하는 메서드
이후 jUnitTest를 run 하면 아래와 같은 결과가 콘솔창에 출력 된다.
만약 테스트가 실패하면 어떻게 될까? 실패를 위한 테스트 케이스를 하나 더 추가해보자. junitTest() 메서드 바로 아래 다음에 다음 코드를 추가해보자.
위의 결과에서는 1 + 2는 3이 맞으므로 True가 Pass가 되었고,
1 + 3는 4인데 sum이 다르므로 Falied 되었다.
여기서 실패용 테스트 케이스를 실행시, 테스트가 실패했다는 표시와 함께 기댓값과 실제 받은 값을 비교해서 알려준다.
이렇게 JUnit은 테스트 케이스가 하나라도 실패하면 전체 테스트를 실패시켜 보여준다.
<자주 사용하는 JUnit Annotation >
앞서 JUnit은 각 테스트에 대해 객체를 만들어 독립적으로 실행 한다고 했는데 이번에 그 내용을 확인해볼 수 있다.
또 테스트는 Annotation에 따라 실행 순서가 정해진다.
JUnitCycleTest.java를 만든다.
< @BeforeAll >
전체 테스트를 시작하기 전에 처음으로 한번만 실행한다. 예를 들어 데이터베이스를 연결해야하거나 테스트 환경을 초기화할 때 사용된다. 이 Annotation은 전체 테스트 실행 주기에서 한 번만 호출되어야 하기에 메서드를 static으로 선언해야 한다.
< @BeforeEach >
테스트 케이스를 시작하기 전에 매번 실행한다. 예를 들어 테스트 메서드에서 사용하는 객체를 초기화하거나 테스트에 필요한 값을 미리 넣을 때 사용할 수 있다. 각 인스턴스에 대해 메서드를 호출해야 하므로 메서드는 static이 아니어야 한다.
< @AfterAll >
전체 테스트를 마치고 종료하기 전에 한 번만 실행한다. 예를 들어 데이터베이스 연결을 종료할 때나 공통적으로 사용하는 자원을 해제할 때 사용할 수 있다. 전체 테스트 실행 주기에서 한번만 호출되어야 하므로 메서드를 static으로 선언해야 한다.
< @AfterEach >
각 테스트 케이스를 종료하기 전 매번 실행한다. 예를 들어 테스트 이후에 특정 데이터를 삭제해야 하는 경우 사용한다.
@BeforeEach와 마찬가지로 메서드는 static이 아니어야 한다.
Annotation을 중심으로 JUnit의 실행 흐름을 살펴보면 다음과 같다. @BeforeEach부터 @AfterEach까지 테스트 개수만큼 반복된 결과를 볼 수 있다.
위의 그림을 테스트 코드를 실행해서 출력 결과를 살펴보자.
위의 결과를 보면, @BeforeAll으로 설정한 메서드가 실행되고, 그 이후에는 테스트 케이스 개수만큼 @BeforeEach -> @Test -> @AfterEach의 생명주기로 테스트가 진행된다. 모든 테이스 케이스가 끝나면 @AfterAll으로 실행하고 종료한다.
Reference : 출처 : 스프링 부트 3 백엔드 개발자 되기 - 자바 편
http://www.yes24.com/Product/Goods/118625612
'스프링부트' 카테고리의 다른 글
DBMS와 ORM (0) | 2023.05.27 |
---|---|
제대로 테스트 코드 작성해보기!(Create Test,MockMvc,@AutoConfigureMockMvc) 및 HTTP 주요 응답 코드 (0) | 2023.05.27 |
Test Code (0) | 2023.05.18 |
Spring Boot Request~Response Process (0) | 2023.05.18 |
Spring Boot3 구조 (0) | 2023.05.18 |