반응형
- BDD(Behavior-driven development)
- 애플리케이션이 어떻게 “행동”해야 하는지에 대한 공통된 이해를 구성하는 방법으로, TDD에서 창안했다.
- 행동에 대한 스팩
- Title
- 제목(이야기를 설명하는 한 줄)
- Narrative(이야기)
- As a
- 역할
- I want
- 기능
- so that
- 이점(기능을 원하는 이유)
- 기능이 실제로 이점을 제공하지 못한다면 일반적으로 누락된 이야기가 있음을 의미한다.
- As a
- Acceptance Criteria
- Given
- 어떠한 상황이 주어졌을 때
- When
- 어떤 행위를 하면
- Then
- 결과는 이렇게 될 것이다.
- Given
- Title
- 예) BDD 이야기 작성
(Title)스토리: 계좌 소유자가 현금을 인출하다.
Narrative:
(As an)계좌 소유자로서
(I want)ATM에서 현금을 인출하고 싶어요
(So that)은행이 문을 닫았을 때 돈을 받을 수 있도록
Scenario 1: 계좌에 충분한 자금이 있습니다.
(Given)계좌 잔액이 $100입니다.
그리고 카드는 유효합니다.
또한 기계에 충분한 돈이 들어 있습니다.
(When) 계좌 소유자가 $20를 요청합니다.
(Then) ATM은 $20를 지급해야 합니다.
계좌 잔액은 $80이어야 합니다.
카드를 반환해야합니다.
Scenario 2: 계좌에 자금이 부족합니다.
(Given) 계좌 잔액은 $10입니다.
그리고 카드는 유효합니다.
또한 기계에 충분한 돈이 들어 있습니다.
(When) 계좌 소유자가 $20를 요청합니다.
(Then) ATM은 돈을 분배해서는 안 됩니다.
ATM은 자금이 부족하다고 말해야 합니다.
계좌 잔액은 $20이어야 합니다.
카드를 반환해야합니다.
Scenario 3: 카드가 비활성화되어있다.
(Given) 카드가 비활성화되었습니다.
(When) 계좌 소유자가 $20를 요청합니다.
(Then) ATM은 카드를 보관해야 합니다.
ATM은 카드가 보관되었다고 표시해야 합니다.
Scenario 4: ATM에 자금이 부족합니다
...
- Mockito는 BddMockito라는 클래스를 통해 BDD 스타일의 API를 제공한다.
- When -> Given
given(memberService.findById(1L)).willReturn(Optional.of(member)); given(studyRepository.save(study)).willReturn(study);
- Verify -> Then
then(memberService).should(times(1)).notify(study); then(memberService).shouldHaveNoMoreInteractions();
Mockito - BDD API 사용예제
@DisplayName("다른 사용자가 볼 수 있도록 스터디를 공개한다.")
@Test
void openStudy() {
// Given
StudyService studyService = new StudyService(memberServiceMock, studyRepositoryMock);
Study study = new Study(10, "더 자바, 테스트");
assertNull(study.getOpenedDateTime());
given(studyRepositoryMock.save(any())).willReturn(study);
// When
studyService.openStudy(study);
// Then
assertEquals(StudyStatus.OPENED, study.getStatus());
assertNotNull(study.getOpenedDateTime());
then(memberServiceMock).should().notify(study);
}
[참고자료]
더 자바, 애플리케이션을 테스트하는 다양한 방법, 백기선
https://javadoc.io/static/org.mockito/mockito-core/3.2.0/org/mockito/BDDMockito.html
반응형
'Java > Test Framework' 카테고리의 다른 글
[더 자바, 애플리케이션을 테스트하는 다양한 방법] Mockito - Mock을 활용한 테스트 방법 (0) | 2021.07.28 |
---|---|
[더 자바, 애플리케이션을 테스트하는 다양한 방법] JUnit 5 - 확장 모델 (0) | 2021.07.27 |
[더 자바, 애플리케이션을 테스트하는 다양한 방법] JUnit 5 - 테스트 설정 파일 (0) | 2021.07.26 |
[더 자바, 애플리케이션을 테스트하는 다양한 방법] JUnit 5 - 테스트 인스턴스 전략 변경 및 테스트 순서 설정 (0) | 2021.07.26 |
[더 자바, 애플리케이션을 테스트하는 다양한 방법] JUnit 5 - 테스트 반복수행 (0) | 2021.07.25 |