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

}

 

 

 

반응형