레알윙 2020. 5. 27. 23:55
반응형

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

위사이트에 들어가서 테스트코드 다운로드 16번째로 commit한거

Mock 객체의 행동

  • null을 리턴 (Optional 타입은 Optional.empty 리턴)
  • Primitive 타입은 기본 Primitive
    • booleanfalse
    • long 0
  • 콜렉션은 비어있는 콜렉션
  • Void메소드는 예외를 던지지 않고 아무런 일도 발생하지 않는다.

 

 

 

Mock 객체를 조작해서

  • 특정한 매개변수를 받은 경우 특정한 값을 리턴하거나 예뢰를 던지도록 만들 수 있다.
    • How about some subbing?
      • https://javadoc.io/doc/org.mockito/mockito-core/latest/org/mockito/Mockito.html#2
    • Argument matchers
      • https://javadoc.io/doc/org.mockito/mockito-core/latest/org/mockito/Mockito.html#3
  • Void 메소드 특정 매개변수를 받거나 호출된 경우 예외를 발생 시킬 수 있다.
    • Subbing void methods with exceptions
      • https://javadoc.io/doc/org.mockito/mockito-core/latest/org/mockito/Mockito.html#5

 

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;

import me.whiteship.inflearnthejavatest.domain.Member;
import me.whiteship.inflearnthejavatest.member.MemberService;

@ExtendWith(MockitoExtension.class)
class StudyServiceTest {

    @Test
    void createNewStudy(@Mock MemberService memberService,
                            @Mock StudyRepository studyRepository) {
        StudyService studyService = new StudyService(memberService, studyRepository);
        assertNotNull(studyService);

        Member member = new Member();
        member.setId(1L);
        member.setEmail("rlawls1991@mail.com");

        when(memberService.findById(any()))
                .thenReturn(Optional.of(member))
                .thenThrow(new RuntimeException())
                .thenReturn(Optional.empty());

        Optional<Member> byId = memberService.findById(1L);
        assertEquals("rlawls1991@mail.com", byId.get().getEmail());

        assertThrows(RuntimeException.class, () -> {
            memberService.findById(2L);
        });

        assertEquals(Optional.empty(), memberService.findById(3L));
    }

}

 

반응형