2๋ถ€ - Mockito

2๋ถ€ - Mockito

 
์Šคํ”„๋ง ๋ถ€ํŠธ๋ฅผ ํ™œ์šฉํ•œ๋‹ค๋ฉด
spring-boot-starter-test ์— ์ด๋ฏธ mockito์˜ ์˜์กด์„ฑ์ด ์ถ”๊ฐ€ ๋˜์–ด์žˆ๋‹ค.
๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด ๋‘๊ฐ€์ง€ ์˜์กด์„ฑ์„ ์ง์ ‘ ์ถ”๊ฐ€ํ•˜์ž
 
<dependency> <groupId>org.mockito</groupId> <artifactId>mockito-core</artifactId> <version>3.1.0</version> <scope>test</scope> </dependency> <-- Mockito Jupiter - JUnit๊ณผ Mockito์˜ ์—ฐ๋™ (JUnit์˜ Extention์ž„) --> <dependency> <groupId>org.mockito</groupId> <artifactId>mockito-junit-jupiter</artifactId> <version>3.1.0</version> <scope>test</scope> </dependency>
 

Mock์„ ํ™œ์šฉํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•˜๋Š”๋ฒ•

  • Mock์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•
  • Mock์˜ ๋™์ž‘์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•
  • Mock์˜ ํ–‰๋™์„ ๊ฒ€์ฆํ•˜๋Š” ๋ฐฉ๋ฒ•
 
 
  1. Mock์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•
MemberService memberService = Mockito.mock(MemberService.class); StudyRepository studyRepository = Mockito.(StudyRepository.class);
Mockito.mock ์‚ฌ์šฉ
 
  1. @Mock ์–ด๋…ธํ…Œ์ด์…˜ ํ™œ์šฉ
  • ํด๋ž˜์Šค์— @ExtendWith(MockitoExtension.class) ์žˆ์–ด์•ผํ•จ
@Mock MemberService memberService; @Mock StudyRepository studyRepository;
ํ•„๋“œ์— @Mock ์ถ”๊ฐ€
@Test void createStudyService(@Mock MemberService memberService, @Mock StudyRepository studyRepository) { ... }
ํ…Œ์ŠคํŠธ ๋ฉ”์†Œ๋“œ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ์— ์ถ”๊ฐ€
 
  1. Mock Object Stubbing
๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชจ๋“  Mock ๊ฐ์ฒด๋Š”
  • null์„ return
  • Optional ํƒ€์ž…์€ Optional.empty
  • primitive ํƒ€์ž…์€ ๊ธฐ๋ณธ primitive ๊ฐ’
  • collection์€ ๋นˆ ์ฝœ๋ ‰์…˜
  • void ๋ฅผ ๋ฆฌํ„ดํ•˜๋Š” ๋ฉ”์†Œ๋“œ๋Š” ์˜ˆ์™ธ๋ฅผ ๋˜์ง€์ง€ ์•Š๊ณ  ์•„๋ฌด๊ฒƒ๋„ ํ•˜์ง€ ์•Š์Œ
 
@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("keesun@email.com"); Mockito.when(memberService.findById(ArgumentMatchers.any())) .thenReturn(Optional.of(member)) .thenThrow(new RuntimeException()) .thenReturn(Optional.empty()); Optional<Member> byId = memberService.findById(1L); assertEquals("keesun@email.com", byId.get().getEmail()); assertThrows(RuntimeException.class, () -> { memberService.findById(2L); }); assertEquals(Optional.empty(), memberService.findById(3L)); }