我正在测试一个void方法,它碰巧在一个类中调用其他几个void方法(所有这些方法都在同一个类中)。该方法是沿着这些线路的东西...如何忽略Mockito中void方法内的几个void方法调用
public void methodToTest() {
methodA();
methodB();
}
void methodA() {
methodA1();
methodA2();
methodA3();
}
我想要做的是使上述methodA()
什么也不做。也就是说,我想methodA()
基本上是这样的:
void methodA() { }
我在methodA()
尝试都doThrow()
和doAnswer()
无济于事。就好像这些都被完全忽略了一样。
什么,我已经试过一个例子...
doThrow(new RuntimeException()).when(mockedClass).methodA();
有没有办法做到这一点只用的Mockito?我无权改变正在修改的课程。
这应该工作,你确定'methodA'不是'最终'? – Brice
'methodA'不是'final' –
回头看看你的代码片段看起来像你想要做一个部分模拟,也许只有执行'methodB'时,你正在执行'methodA'。你当然使用'mock(YourObject.class)',那么当然一个mock什么都不做,当然也不会执行真正的代码。你可以实现你想要的'spy(YourObject.class)'它默认会执行真正的代码。然而,部分模拟被认为是测试气味,如果不是设计气味,您应该寻找机会将'methodA'的行为作为一个依赖项,例如,您可以在API中将其暴露为'AStrategy'。 – Brice