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

 

스프링 부트 3 백엔드 개발자 되기 - 자바 편 - YES24

- 자바 백엔드 개발자가 되고 싶다면- 자바 언어 입문 그다음에 꼭 보세요실력을 갖춘 개발자로 성장하려면 시작이 중요합니다. 그래서 이 책은 무엇부터 익혀야 하는지 막막한 입문자에게 백엔

www.yes24.com

 

+ Recent posts