ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • BDD 스타일 Mockito API
    백기선(인프런 강의)/더 자바, 애플리케이션을 테스트하는 다양한 방법 2020. 6. 2. 08:43
    반응형

    https://github.com/keesun/inflearn-the-java-test

    위 사이트에 들어가서 테스트코드를 받자(3399abcc89ce150b48dcfbcac54d418350467760)

     

    BDD

    • 애플리케이션이 어떻게 '행동'해야 하는지에 대한 공통된 이해를 구성하는 방법으로, TDD에서 창안됨
    • MockitoBddMockito라는 클래스를 통해 BDD 스타일의 API를 제공한다

    BDD 스타일

    • When - > Given
    • Verify -> Then

     

    행동에 대한 스팩

    • Title
      • 행동의 이름
    • Narrative  행동에 대한 설명
      • as a
        • 어떤한 역활
      • I want
        • 내가 원하는 것
      • so that
        • 의사 표현
    • Acceptance criteria  인수 테스트한 내용
      • Given
        • 어떠한 상황이 주어진 상황
      • When
      • Then

     

    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();
        }
    
    }

     

     

     

    반응형
Designed by Tistory.