728x90
반응형
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
@Spy와 @SpyBean은 아래의 글을 참고해주세요.
2021.04.11 - [Spring/JUnit & Test] - [Mock과 Mocktio] @Spy @SpyBean
파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음
반응형
'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 |