카테고리 없음
JUnit5 - Java에서의 단위테스트6 - BDD
ysk(0soo)
2022. 8. 21. 21:56
BDD 스타일 Mockito API
BDD:애플리케이션이 어떻게 “행동”해야하는지에 대한 공통된 이해를 구성하는 방법으로, TDD에서 창안했다.
- BDD : Behaviour-Driven Development의 약자
- TDD : Test-Driven Development의 약자
BDD는 시나리오를 기반으로 테스트 케이스를 작성하며 함수 단위 테스트를 권장하지 않는다. 이 시나리오는 개발자가 아닌 사람이 봐도 이해할 수 있을 정도의 레벨을 권장한다. 하나의 시나리오는 Given, When, Then 구조를 가지는 것을 기본 패턴으로 권장하며 각 절의 의미는 다음과 같다.
Feature : 테스트에 대상의 기능/책임을 명시한다. Scenario : 테스트 목적에 대한 상황을 설명한다. Given : 시나리오 진행에 필요한 값을 설정한다. When : 시나리오를 진행하는데 필요한 조건을 명시한다. Then : 시나리오를 완료했을 때 보장해야 하는 결과를 명시한다.
테스트 대상은 A 상태에서 출발하며(Given) 어떤 상태 변화를 가했을 때(When) 기대하는 상태로 완료되어야 한다. (Then) 또는 Side Effect가 전혀 없는 테스트 대상이라면 테스트 대상의 환경을 A 상태에 두고(Given) 어떤 행동을 요구했을 때(When) 기대하는 결과를 돌려받아야 한다. (Then)
행동에대한스팩
- Title
- Narrative
- As a / I want / so that
- Acceptance criteria
- Given / When / Then
Mockito는 BddMockito
라는 클래스를 통해 BDD스타일의 API를제공한다.
Given
- org.mockito.BDDMockito.given() 메서드
- 위에서 사용했던 when을 다음과 같이 바꿀 수 있다. when -> given
-
when(memberService.findById(1L)) .thenReturn(Optional.of(member)); when(studyRepository.save(study)) .thenReturn(study) // given(memberService.findById(1L)) .willReturn(Optional.of(member)); given((studyRepository.save(study))) .willReturn(study);
Then
- org.mockito.BDDMockito.then() 메서드
- 위에서 사용했던 verify를 다음과 같이 바꿀 수 있따. verify -> then
-
verify(memberService, times(1)).notify(study); verifyNoMoreInteractions() then(memberService).should(times(1)).notify(study); then(memberService).shouldHaveNoMoreInteractions();
참고
- https://javadoc.io/static/org.mockito/mockito-core/3.2.0/org/mockito/BDDMockito.html
- https://javadoc.io/doc/org.mockito/mockito-core/latest/org/mockito/Mockito.html#BDD_behavior_verification
- 인프런 백기선님 강의 더 자바, 애플리케이션을 테스트하는 다양한 방법
- https://velog.io/@seongwon97/Unit-Test-%EB%8B%A8%EC%9C%84-%ED%85%8C%EC%8A%A4%ED%8A%B8