백기선(인프런 강의)/더 자바, 애플리케이션을 테스트하는 다양한 방법
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();
}
}
반응형