[Spring Boot] RESTful 웹서비스 테스트
Spring Boot 프로젝트에서 RESTful 웹서비스 테스트를 공부한 글입니다.
목표
JUnit4 단위 테스팅과 스프링 테스트
내용
스프링에서 테스팅 방식과 패턴을 사용해 테스팅을 수행한다.
스프링 테스트 프레임웍을 사용해서 테스트를 수행할 수 있다.
JUnit
Java에서 독립된 단위테스트(Unit Test)를 지원해주는 프레임워크
단위테스트(Unit Test)란?
- 소스 코드의 특정 모듈이 의도된 대로 정확히 작동하는지 검증하는 절차, 즉 모든 함수와 메소드에 대한 테스트 케이스(Test case)를 작성하는 절차 (일반적인 절차)
- jUnit은 보이지 않고 숨겨진 단위 테스트를 끌어내어 정형화시켜 단위테스트를 쉽게 해주는 테스트 지원 프레임워크
- 개발자가 직접 테스트 하는 메소드 단위의 테스트를 단위테스트라 한다.
- Junit은 단정 메서드(assertXxx)로 수행결과를 판단한다.
※ 테스트 코드를 작성하여 JUnit을 사용하며 개발하는 것을 TDD(Test Driven Development)라고 함.
단위 테스트 대상
주로 단위 테스트의 대상으로는 Service, Dao (Repository) 클래스의 메서드들을 테스트 한다.
테스트 클래스들의 메서드에 테스트 케이스를 작성하여 테스트한다.
※ 테스트 코드를 함께 빌드해서 테스트 케이스의 수행까지 메이븐에서 얘기하는 빌드 프로세스에 포함한다.
TDD는 public으로 만들어진 모든 메소드에 대해서는 전부다 테스트 케이스를 만든다는 관점이다.
E-2-E (End To End) 테스트도 가능하다.
E2E Test는 MockMVc를 이용하여 Controller의 URI 테스트가 가능하다. localhost:8080/ 를 호출하는 테스트인데 웹 서비스가 요청에서부터 결과를 제대로 반환하는지, 요청에서부터 최종 결과까지를 테스트할 수 있다.
현재 보고있는 강의가 예전 강의여서 그런지 예제가 정상적으로 동작하지 않기 때문에 Controller URI TEST는 공식 문서를 참고해서 공부하여 공유할 예정이다.
테스트 케이스 작성
다음과 같이 사용되는 Repository 클래스가 있다고 하자.
UserStudyRepository 클래스
그 중에서 getUsers() 메소드를 테스트한다고 했을 때를 보자.
테스트 클래스를 생성한다.
프로젝트의 src폴더 밑에 크게 main, test 폴더로 나뉘는데 패키지 구조 및 클래스 경로는 동일하게 한다.
그리고 테스트 클래스 이름은 클래스명 뒤에 Tests 라는 postfix를 붙여서 생성한다.
main.java.com.project.blog.dao.UserStudyRepository
test.java.com.project.blog.dao.UserStudyRepositoryTests
UserStudyRepositoryTests 클래스
테스트 클래스에 @SpringBootTest 어노테이션을 추가한다.
(JUnit5에서는 @RunWith 어노테이션을 안 쓴다.)
위에서 UserStudyRepository 클래스에서 getUsers() 메서드를 테스트 한다고 했다.
테스트 클래스에 prefix로 'test'를 붙인 메서드(testGetUsers)를 생성한다. 메서드에는 @Test 어노테이션을 추가한다.
해당 메서드에서 UserStudyRepository 클래스의 getUsers() 메서드를 호출하고 정상적인 경우를 체크하기 위한 단정 메서드(assertXxx)를 추가해 검증한다.
assertTrue 단정 메서드를 사용해 레포지토리의 메서드를 검증한다.
Intellij 기준으로 테스트 메서드를 실행시켰을 때 결과가 정상적인 경우 다음과 같이 녹색 체크가 되어 나타난다.
임의로 실패하도록 값을 변경을 하여서 실행하면 다음과 같이 tests failed 결과를 보여준다.
Service 클래스를 테스트할 때에도 repository와 동일하게 test 폴더에서 동일한 경로에 클래스를 생성하고, Service 클래스를 DI 한 다음, 테스트 케이스를 작성하면 된다.
단위테스트(Unit Test)의 설명 정리
- 1 단위테스트는 모듈이 의도된 대로 정확히 작동하는지 검증하는 절차를 의미한다.
- 2 단위테스트는 함수와 메소드에 대한 테스트 케이스(Test case)를 작성하는 절차이다.
- 3 jUnit은 단위 테스트를 정형화시켜 쉽게 해주는 테스트 지원 프레임워크이다.
- 4 jUnit 프레임워크를 사용하기 위해서는 spring-test 라이브러리가 필요하다.
정리
- 스프링에서 기본적으로 사용하는 빌드 툴인 메이븐은 설계시 부터 테스트를 중요하게 생각하고 설계되었다.
- JUnit을 사용해 단위테스트를 수행하고 Spring-test 라이브러리를 사용하여 자동으로 스프링컨테이너를 로딩하고 @Autowired를 사용하여 빈을 테스트 할 수 있다.
이번 글에서는 [SpringBoot] RESTful 웹서비스의 테스트에 대해서 알아보았습니다. 도움이 되셨다면 좋아요 꾹! 광고 꾹! 부탁드립니다. 제게 큰 힘이 됩니다! 감사합니다.^^
'java, spring' 카테고리의 다른 글
[Spring Boot] 로그와 예외처리 (0) | 2022.03.19 |
---|---|
[Spring Boot] AOP - Aspect Oriented Programming (0) | 2022.03.19 |
[Spring Boot] REST API, CRUD 구현 (0) | 2022.03.17 |
[SpringBoot] API Security and JWT (0) | 2022.03.15 |
[SpringBoot] MariaDB 연결하기 (0) | 2022.03.10 |