[Spring] 테스트
Updated: Categories: CS테스트 방법에 대해 알아보자
Test Double
- 테스트를 위한 객체를 만들어주는 존재
- 종류
- dummy : 객체는 필요하지만 기능은 필요없을 때 사용
- fake : 실제 객체의 동작을 간소화하여 구현한 객체
- stub : 테스트를 위해 준비된 결과를 반환해주는 객체
- spy : stub 역할을 가지며 호출 내용에 대해 약간의 정보를 기록함
- mock : 호출과 호출에 대한 기대를 명세하고, 내용에 따라 동작하도록 만들어진 객체
stub vs mock
- stub은 상태검증에 사용되고, mock은 행위검증에 사용된다.
- stub은 stubbing만 가능하지만, mock은 stubbing + mocking 둘 다 가능하다
- stubbing : 호출에 대한 반환값을 정의하는 것
- mocking : 행위를 검증할 수 있도록 해주는 것
상태검증 vs 행위검증
- SUT(System Under Test) : 테스트를 진행할 대상 객체
- 상태검증 : SUT가 실행된 후의 상태(결과)를 검증한다
- 행위검증 : SUT가 실행되는 중 일어난 행위를 검증한다.
테스팅 레벨
- 단위 테스트 : 모듈 하나를 고립시켜 테스트함
- 통합 테스트 : 내부 모듈의 연동과 외부 모듈의 연동을 테스트함
- 인수 테스트 : 사용자 시나리오에 맞춰 수행하는 테스트. End to End Test
테스트 커버리지
- 테스트가 얼마나 충분한지를 나타냄
- 화이트박스 테스트를 통해 측정한다
- 종류
- 구문(Statement/Line) : 코드 한줄이 한번 이상 실행되면 조건 충족
- 조건(Condition) : if문의 내부 조건이 각각 true/false의 경우를 충족하는지 살펴봄
- 결정(Decision/Branch) : if문 전체 조건이 true/false의 경우를 충족하는지 살펴봄
Junit4 vs Junit5
- Junit : 자바 단위테스트 프레임워크
Junit4 | Junit5 | |
---|---|---|
Java 버전 | Java 5이상 | Java 8이상 |
모듈 | 전체를 로드 | Platform, Jupiter, Vintage로 나뉘어져 있음 |
Spring Boot 계층별 테스트
- 단위 테스트
- 단일객체(Entity, Dto) : 상태 검증만 함
- Repository : DataJpaTest
- Service : Mockito
- Controller : Mockito
- 통합 테스트
- Controller : MockMvc, RestDocs
TDD
- Test Driven Development, 테스트 주도 개발
- 테스트코드를 먼저 작성한 후 실제 코드를 작성하는 방법
- 결정(코딩)과 피드백(에러)의 차이를 조절하기 위한 기술
- 적용
- 요구사항이 자주 바뀔 경우 사용
- 불확실성이 높을 때