【发布时间】:2020-05-31 22:10:21
【问题描述】:
public class DummyTest {
@InjectMocks
private TestService service;
@Mock
private TestRepository repository;
@BeforeEach
public void before() {
MockitoAnnotations.initMocks(this);
}
@Test
public void testMe() {
when(repository.findAllByQuery("")).thenReturn(List.of());
List<String> entities = service.findAllByQuery("test");
verify(repository, times(1)).findAllByQuery(anyString());
}
}
class TestService {
private TestRepository repository;
public List<String> findAllByQuery(String query) {
return repository.findAllByQuery(query);
}
}
class TestRepository {
public List<String> findAllByQuery(String query) {
return List.of("");
}
}
当我通过@BeforeEach 注解进行Mockito 初始化时,上述测试成功通过。
之后,我尝试删除@BeforeEach 注释并使用@ExtendWith(MockitoExtension.class) 初始化Mockito 并且测试失败,原因是:
org.mockito.exceptions.misusing.UnnecessaryStubbingException:
org.mockito.exceptions.misusing.UnnecessaryStubbingException:
Unnecessary stubbings detected.
Clean & maintainable test code requires zero unnecessary code.
Following stubbings are unnecessary (click to navigate to relevant line of code):
1. -> at DummyTest.testMe(DummyTest.java:33)
Please remove unnecessary stubbings or use 'lenient' strictness. More info: javadoc for UnnecessaryStubbingException class.
能否请您解释一下,为什么我得到如此不同的测试执行结果?从技术上讲,我刚刚改变了初始化 Mockito 的方式等等。
【问题讨论】:
标签: unit-testing testing junit mockito junit5