STUDY/Spring
Mockito | @Mock, @InjectMocks
개미606
2022. 4. 6. 09:56
MockitoExtension
- JUnit5는
@ExtendWith
애노테이션을 사용한다.
해당 애노테이션을 사용하면 @Mock
, @Spy
, @InjectMocks
와 같은 MockitoAnnotations를 사용할 수 있게된다.
@ExtendWith(MockitoExtension.class)
class SomeTestClass {}
@ExtendWidth()
로 설정하고 싶지 않다면 직접 해줄 수도 있다..
public class SampleBaseTestCase {
private AutoCloseable closeable;
@Before public void openMocks() {
closeable = MockitoAnnotations.openMocks(this);
}
@After public void releaseMocks() throws Exception {
closeable.close();
}
}
참고로 initMocks()는 Deprecated 상태다.
openMocks()
를 사용해야 한다.
@Mock
@Mock
애노테이션은 모의 클래스를 만들 때 사용한다.
@ExtendWith(MockitoExtension.class)
class SomeTestClass {
@Mock
private SomeClass mocking;
}
만약 @Mock
애노테이션을 사용하지 않는다면 Mockito.mock()
으로 직접 모의 클래스를 설정해 주어야 한다.
public class SomeTestClass {
private SomeClass mocking;
@BeforEach {
this.mocking = Mockito.mock(SomClass.class);
}
}
@InjectMocks
@InjectMocks
는 의존성을 필요로 하는 field에 붙이는 애노테이션으로, @Mock
이나 @Spy
애노테이션이 붙은 field를 주입받는다.
이렇게 생성자 방식으로 의존성을 주입받는 클래스가 있다. 해당 클래스를 테스트 할 때 @InjectMocks
가 필요하다.
public class SomeService {
private SomeRepository repository;
public SomeService(SomeRepository repository) {
this.repository = repository;
}
}
이렇게만 하면 의존관계 주입을 자동으로 해준다. 생성자, setter, field 주입 방식을 지원한다.
@ExtendWith(MockitoExtension.class)
class SomeServiceTest {
@InjectMocks
private SomeService service;
@Mock
private SomeRepository repository;
}