-
BDD 스타일 Mockito API백기선(인프런 강의)/더 자바, 애플리케이션을 테스트하는 다양한 방법 2020. 6. 2. 08:43반응형
https://github.com/keesun/inflearn-the-java-test
위 사이트에 들어가서 테스트코드를 받자(3399abcc89ce150b48dcfbcac54d418350467760)
BDD
- 애플리케이션이 어떻게 '행동'해야 하는지에 대한 공통된 이해를 구성하는 방법으로, TDD에서 창안됨
- Mockito는 BddMockito라는 클래스를 통해 BDD 스타일의 API를 제공한다
BDD 스타일
- When - > Given
- Verify -> Then
행동에 대한 스팩
- Title
- 행동의 이름
- Narrative 행동에 대한 설명
- as a
- 어떤한 역활
- I want
- 내가 원하는 것
- so that
- 의사 표현
- as a
- Acceptance criteria 인수 테스트한 내용
- Given
- 어떠한 상황이 주어진 상황
- When
- Then
- Given
Given/When/Then 사용 예시
import me.whiteship.inflearnthejavatest.domain.Member; import me.whiteship.inflearnthejavatest.domain.Study; import me.whiteship.inflearnthejavatest.member.MemberService; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import java.util.Optional; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.mockito.BDDMockito.given; import static org.mockito.BDDMockito.then; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.when; @ExtendWith(MockitoExtension.class) class StudyServiceTest { @Mock MemberService memberService; @Mock StudyRepository studyRepository; @Test void createNewStudy() { // Given - 상황이 만듬 StudyService studyService = new StudyService(memberService, studyRepository); assertNotNull(studyService); Member member = new Member(); member.setId(1L); member.setEmail("rlawls1991@email.com"); Study study = new Study(10, "테스트"); //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); // When - 어떤 일이 일어날때 studyService.createNewStudy(1L, study); // Then - 이에 따른 결과 assertEquals(member, study.getOwner()); //verify(memberService, times(1)).notify(study); //verifyNoMoreInteractions(memberService); then(memberService).should(times(1)).notify(study); then(memberService).shouldHaveNoMoreInteractions(); } }
반응형'백기선(인프런 강의) > 더 자바, 애플리케이션을 테스트하는 다양한 방법' 카테고리의 다른 글
Testcontainers 기능 (0) 2020.06.07 Testcntainers 소개 및 설치 (0) 2020.06.05 Mock 객체 확인 (0) 2020.05.29 Mock객체 stubbing연습문제 (0) 2020.05.28 Mock 객체 Stubbing (0) 2020.05.27