spring boot/snippets
Spying 하는 방법
lingi04
2021. 12. 22. 23:16
...
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.BDDMockito.given;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
...
@ExtendWith(SpringExtension.class)
public class TestTest {
@Mock
EntityRepository entityRepository;
@AutoSource
@ParameterizedTest
public void create_test(Req req, Entity entity, String createUser) throws Exception {
Req spyReq = spy(req);
when(spyReq.toEntity(createUser)).thenReturn(entity);
given(entityRepository.save(entity)).willReturn(entity);
assertThrows(InvalidExtException.class, () -> entityService.create(spyReq, createUser));
}
}
지금 보니 위의 코드는 뭔가 좀 이상한 코드네... Mocking 하는데 SpringExtension을 사용 할 필요는 없다.(과거의 나...ㅠㅠ)
대신 이렇게 사용하면 될것 같다.
@ExtendWith(MockitoExtension.class)
public class TestTest {
// ExtendWith에 MockitoExtension을 넣고 이렇게 어노테이션을 사용 하면
// Mock 객체가 주입이 됨.
@Mock
EntityRepository entityRepository;
@AutoSource
@ParameterizedTest
public void create_test(Req req, Entity entity, String createUser) throws Exception {
// 아니면 이런 식으로 static method를 import 해서 사용해도 됨.
Req spyReq = spy(req);
when(spyReq.toEntity(createUser)).thenReturn(entity);
given(entityRepository.save(entity)).willReturn(entity);
assertThrows(InvalidExtException.class, () -> entityService.create(spyReq, createUser));
}
}
정리 하자면
MockitoExtension
을 사용하여@Mock
,@Spy
등을 써서 의존성 주입mock()
,spy()
같은 static method를 import 해서 사용