例如我有处理程序:
@Component
public class MyHandler {
@AutoWired
private MyDependency myDependency;
public int someMethod() {
...
return anotherMethod();
}
public int anotherMethod() {...}
}
测试它我想写这样的东西:
@RunWith(MockitoJUnitRunner.class}
class MyHandlerTest {
@InjectMocks
private MyHandler myHandler;
@Mock
private MyDependency myDependency;
@Test
public void testSomeMethod() {
when(myHandler.anotherMethod()).thenReturn(1);
assertEquals(myHandler.someMethod() == 1);
}
}
但它实际上调用 anotherMethod()
每当我试图模拟它时。我应该用 myHandler
做什么来模拟它的方法?
原文由 Vova Yatsyk 发布,翻译遵循 CC BY-SA 4.0 许可协议
首先,模拟 MyHandler 方法的原因可能如下:我们已经测试了
anotherMethod()
并且它具有复杂的逻辑,那么为什么我们需要再次测试它(就像someMethod()
的一部分)---
) 如果我们可以verify
它正在调用?我们可以通过:
注意:在“间谍”对象的情况下,我们需要使用
doReturn
而不是thenReturn
( 这里 没有什么解释)