2024. 5. 23. 01:08ㆍSpring Boot/Testing
들어가며
소프트웨어 테스팅은 개발 라이프사이클에 있어 필수적인 요소이다.
테스트를 어떤 방법으로 진행할 지, 어떤 테스팅 프레임워크를 사용해야 할 지 에 대해 Spring은 Unit Test부터 Integration Test까지 광범위한 선택지를 제공한다.
소프트웨어 테스트의 종류
단위 테스트 (Unit Test)
단위 테스트(Unit Test)란 소프트웨어, 어플리케이션, 코드 등의 부분이 적절하게 동작하여 원하는 결과를 얻을 수 있는지 테스트하는 방법으로, TDD(Test Driven Development) 의 핵심 개념이다.
단위 테스트의 코드는 실제 동작하는 코드와 분리되어 있고, 변화하는 코드에 빠르게 적용할 수 있어야 한다.
개발 초기에는 개발자가 수동으로 실시하는 단위 테스팅이 효율적일 수 있고, 개발 후기에 테스트에 드는 리소스를 감소시켜 줄 수 있다..
1000줄이 넘는 Java 코드를 보유하고 있다고 가정해보자.
우선, 이 코드는 SRP(Single Responsibility Principle. 단일 책임 원칙)에 위배된다. 한 모듈은 하나의 책임을 가져야 한다.
따라서 (실제로 위배되지 않았더라도) 우리는 코드를 분리하게 된다.
이제 단위 테스트를 설계하려면, 테스트의 적절한 범위를 정해야 한다. 단위 테스트는 3가지 단계로 이루어져 있다.
- Plan : 유닛 테스트 케이스를 준비하고 리뷰한다.
- Design : 설계한 테스트 케이스를 스크립트로 구현한다.
- Test : 단위 테스트를 수행한다.
가장 인기있는 Java 단위 테스팅 프레임워크중 하나는 JUnit이다.
JUnit은 객체를 Mocking하여 new 키워드를 사용해 초기화하거나 JDBC 커넥션 풀에서 분리된 단위 테스트 환경을 만들 수 있다.
통합 테스트 (Integration Test)
독립된 모듈이 함께 상호작용하는지 테스트하는 것을 의미한다.
클래스나 모듈이 자체적으로는 잘 동작하더라도, 다른 모듈과 통신할 때 완벽하게 동작하리라는 것을 보장할 수는 없다.
개발자들이 각자 기능을 개발했고, 그 기능들이 단위 테스트는 통과하더라도 통합 테스트는 따로 수행되어야 한다.
그래서 통합 테스트를 단위 테스트의 중첩으로 생각할 수도 있다.
회귀 테스트 (Regression Test)
코드의 변경 내용이나 패키지 배포로 인한 시스템의 영향도를 테스트하는 것을 의미한다.
기타 다른 테스트 전략들도 존재한다.
- 부하 테스트 (Load Test)
- DB 테스트 (DB Test)
- 프로파일링 (Profiling)
Spring Boot App Test
Spring Boot는 어플리케이션에 대해 다양한 단위, 통합 테스트 라이브러리와 spring-boot-test-authconfigure 의존성을 제공한다.
- JUnit : TDD 사이클에 맞춘 단위 테스트 프레임워크
- Mockito : Java 객체 Mocking 프레임워크
- Spring Test : 통합 테스트 유틸리티