Mockito Stubbing이란?

  • 모든 Mock 객체의 행동을 조작하는 방법

샘플 클래스 구조

//Mockito.mock() 메소드로 만드는 방법
 
 @Test
    public void mokitoTeset() {
        A a = mock(A.class);
        B b = mock(B.class);
        C c = new C(a, b);
        When(c.method1()).thenReturn(10) // 숫자 10을 리턴해야함
        When(c.method2(“test”)).thenReturn(“1“) // 문자열 “1”을 리턴해야함
 }

 

@Test
public void stubbingTest() {
    Service service = mock(Service.class);
    Member member = new Member();
    member.setId(“testId”);
    member.setEmail("abcd@naver.com");
    when(memberService.findById(“testId”))
            .thenReturn(Optional.of(member))  //findById가 첫번째 불렸을때 객체 리턴
            .thenThrow(new RuntimeException()) //findById가 두번째 불렸을때 예외발생
            .thenThrow(new RuntimeException()) //findById가 세번째 불렸을때 예외발생
            .thenReturn(Optional.empty()); //findById가 네번째 불렸을때 empty 리턴

    Optional<Member> byId = service.findById(“testId”); //첫번째 불렸을때
    assertEquals("abcd@naver.com", byId.get().getEmail());
    assertThrows(RuntimeException.class, () -> {
        service.findById(“testId”); //두번째 불렸을때

    });
    assertThrows(RuntimeException.class, () -> {
        service.findById(“testId”); //세번째 불렸을때
    });
    assertEquals(Optional.empty(), service.findById("testId")); //네번째 불렸을때
}

 

@DisplayName("BDD 스타일")
@Test
public void bddTest() {
    
/////// Given
        Service service = mock(Service.class);
        Repository repository = mock(Repository.class);
        
        Manager manager = new StudyService(service, repository);
        assertNotNull(manager);
        
        Member member = new Member();
        member.setId("testId");
        member.setEmail("abcd@naver.com");
        
        Job job = new Job(1, "search");
        
        given(manager.findById("testId")).willReturn(Optional.of(member));
        given(repository.save(job)).willReturn(job);



////// When
        manager.jobSchedule(1, job);



 ////// Then
        then(manager).should(times(1)).findById("testId"); //findById라는 메소드는 한번 실행되어야한다.
        then(manager).should(times(1)).notify(job); // notify(Job) 메소드는 한번 실행되어야한다.
        then(manager).should(times(1)).notify(member); //notify(Member) 메소드는 한번 실행되어야한다.
        then(manager).shouldHaveNoMoreInteractions();  //manager객체로 더이상 interaction이 있으면 안됨
   
}

' > Mockito' 카테고리의 다른 글

mokito란?  (0) 2022.03.14

 

 https://www.jetbrains.com/lp/devecosystem-2021/java/

 

  • Mock
    • 진짜 객체와 비슷하게 동작하지만 프로그래머가 직접 그 객체의 행동을 관리하는 객체.
  • Mokito
    • Mock 객체를 쉽게 만들고 관리하고 검증할 수 있는 방법을 제공한다.

' > Mockito' 카테고리의 다른 글

mokito 샘플 코드  (0) 2022.03.14

+ Recent posts