使用 Mockito 仅模拟超类中的特定方法调用
使用 Mockito 进行单元测试时,可能需要仅模拟特定的方法调用调用超类中的方法,同时保持其他调用不受影响。考虑以下场景:
<code class="java">class BaseService { public void save() {...} } public Childservice extends BaseService { public void save(){ //some code super.save(); } }</code>
在此示例中,您只想模拟 ChildService 类中对 super.save() 的调用,保留其他 save() 方法调用的行为。
使用间谍和存根的解决方案
虽然重构可能是一个可行的解决方案,但它并不总是可行。在这种情况下,您可以利用间谍和存根技术来实现所需的模拟行为:
<code class="java">@Test public void testSave() { ChildService classToTest = Mockito.spy(new ChildService()); // Prevent/stub logic in super.save() Mockito.doNothing().when((BaseService)classToTest).validate(); // When classToTest.save(); // Then verify(classToTest).load(); }</code>
说明:
通过使用间谍和存根,您可以有效地模拟所需的模拟行为,从而允许您测试特定的方法调用在超类中,同时保留原始功能。
以上是如何使用 Mockito 仅模拟超类中的特定方法调用?的详细内容。更多信息请关注PHP中文网其他相关文章!