- TDD(테스트 주도 개발)
- 테스트의 중요성을 강조한 개발방법론으로서 테스트코드를 먼저 설계 및 개발하고, 그 이후에 개발을 해 나가는 것
- 테스트 코드를 먼저 작성함으로써 개발자는 원하는 기능과 그 기능의 동작 방식에 대해 더욱 명확하게 이해할수 있고, 결함의 조기발견을 통해 장기적 효율성 증대
- JUNIT이 spring에서 가장 많이 사용되는 라이브러리
- 테스트 방법
- 단위테스트
- 단위 테스트는 애플리케이션의 가장 작은 단위(메소드, 클래스)를 테스트
- Controller 테스트
- @WebMvcTest 어노테이션을 사용. 이는 Spring MVC 컨트롤러를 테스트하는 데에 최적화되어 있으며, 관련 빈들만 로드
- 목킹(Mocking)을 사용하여 외부 의존성을 가상화
- mock이란 실제 객체를 모방하는 가짜 객체로, 주로 단위 테스트에서 실제 구현을 대체하기 위해 사용
- MockMvc는 Spring MVC 컨트롤러를 테스트하기 위해 HTTP 요청을 모의로 보내고, 응답을 검증
- Service 테스트
- @MockBean으로 필요한 의존성을 목킹하여 격리된 환경에서 테스트
- Repository 테스트
- @DataJpaTest는 JPA 관련 설정만 로드
- @SpringbootTest 어노테이션 사용시 전체 설정 로드
- 통합테스트
- 통합 테스트는 애플리케이션의 여러 컴포넌트나 전체 시스템이 올바르게 작동하는지 확인
- @SpringBootTest 어노테이션을 사용
- 각각의 메서드에 대해서 각각 실행 가능, 전체 클래스 단위로 실행도 가능
- 전체 클래스 단위로 테스트 할때는 메서드 간 의존성 제거 필요
- AfterEach 어노테이션 사용하여 추가된 data삭제와 같은 의존성 제거 작업 필요
- DataJpaTest의 경우 자동 DB롤백기능 수행
- 주요패턴
- given, when, then(준비-prepare,실행-excute,검증-assert) 패턴을 많이 사용
- 예시상황)
Given (준비) : 사용자의 은행 계좌에 1,000달러가 있다.
When (실행) : 500달러 인출코드 실행
Then (검증) : 사용자의 계좌 잔액은 500달러가 됐는지 검증
- 예시 코드)
//Given
account = new BankAccount(1000)
// When
account.withdraw(500)
// Then
assert account.balance == 500