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;
}
'STUDY > Spring' 카테고리의 다른 글
MyBatis | ResultMap (0) | 2022.03.15 |
---|---|
Spring Boot | Spring Security JWT 인증 처리 과정 (1) | 2022.02.10 |
Spring Boot | Request 마다 로그 찍기 (0) | 2022.01.21 |
Spring Boot | war 빌드, 외부 톰캣 사용 (WAS에 배포하기) (0) | 2021.11.22 |
Spring | JDBCTemplate 사용하기 (0) | 2021.11.19 |