Mock과 Spy의 주입을 허용합니다.
Mockito에서 가짜 객체를 주입하는 방식은 생성자 주입방식, Setter 주입방식, Field 주입방식이 있습니다.(DI와 동일)
생성자 주입방식(Constructor Injection)
생성자를 이용하여 가짜 객체를 주입하면 Mockito에서는 다른 주입방식을 시도하지 않습니다.
=> 매개변수가 있는 생성자가 있는 경우, 개체를 손상시키지 않기로 Mockito에서 결정
생성자 ConstructService를 만들어서 객체를 주입합니다.
public class ConstructService {
private RegionService regionService;
public ConstructService(RegionService regionService) {
this.regionService = regionService;
}
//메소드 정의
public List<Region> getRegions(){
return regionService.getRegions();
}
}
Setter 주입방식
Setter를 만들어서 객체를 주입합니다.
public class SetterService {
private RegionService regionService;
public void setRegionService(RegionService regionService) {
this.regionService = regionService;
}
//메소드 정의
public List<Region> getRegions(){
return regionService.getRegions();
}
}
Field 주입방식
객체를 사용할 때 필드에서 주입합니다.
public class FieldService{
private RegionService regionService;
//메소드 정의
public List<Region> getRegions(){
return regionService.getRegions();
}
}
세가지 주입 방식의 사용
class BaseTestCase{
private AutoCloseable autoCloseable;
@BeforeEach
void setUp(){
MockitoAnnotations.openMocks(this);
}
@AfterEach
void closeMock() throws Exception {
MockitoAnnotations.openMocks(this).close();
}
}
public class MockTest extends BaseTestCase{
@Mock
private RegionService regionService;
@InjectMocks
private ConstructorService constructorServiceInjectionMock;
@InjectMocks
private SetterService setterServiceInjectionMocks;
@InjectMocks
private FieldService fieldServiceInjectionMocks;
@Test
void constructorInjectionTest(){
when(constructorServiceInjectionMock.getRegions()).thenReturn(regions);
assertEquals(constructorServiceInjectionMock.getRegions().get(0).getName(), "Seoul");
}
@Test
void setterInjectionTest(){
when(setterServiceInjectionMocks.getRegions()).thenReturn(regions);
assertEquals(setterServiceInjectionMocks.getRegions().get(0).getName(), "Seoul");
}
@Test
void fieldInjectionTest(){
when(fieldServiceInjectionMocks.getRegions()).thenReturn(regions);
assertEquals(fieldServiceInjectionMocks.getRegions().get(0).getName(), "Seoul");
}
}
@Mock과 @MockBean은 아래의 글을 참고해주세요.
2021.04.11 - [Spring/JUnit & Test] - [Mock과 Mocktio] @Mock @MockBean
[Mock과 Mocktio] @Mock @MockBean
Mockito Document : https://javadoc.io/doc/org.mockito/mockito-core/latest/org/mockito/Mockito.html 참고 코드 : https://github.com/journaldev/journaldev/tree/master/Mockito-Examples Mock이란? 가짜 객..
twer.tistory.com
@Spy와 @SpyBean은 아래의 글을 참고해주세요.
2021.04.11 - [Spring/JUnit & Test] - [Mock과 Mocktio] @Spy @SpyBean
[Mock과 Mocktio] @Spy @SpyBean
Mockito Document : https://javadoc.io/doc/org.mockito/mockito-core/latest/org/mockito/Mockito.html 참고 코드 https://github.com/journaldev/journaldev/tree/master/Mockito-Examples https://cobbybb.tis..
twer.tistory.com
제주 삼다수
COUPANG
www.coupang.com
파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음
'Spring > JUnit & Test' 카테고리의 다른 글
[Mock과 Mocktio] @Mock @MockBean (0) | 2022.12.15 |
---|---|
[Test] DataJpaTest에서 MySQL 설정 (0) | 2022.12.02 |
[Mock과 Mocktio] @Spy @SpyBean (0) | 2021.04.11 |
[JUnit4 vs JUnit5] @Test(expected=...) (0) | 2021.04.02 |
[JUnit5] RunWith (0) | 2021.02.28 |