克服 Mockito 挑战:模拟来自超类的方法调用
Mockito 是一个 Java 模拟框架,为隔离方法调用提供了强大的工具测试期间。然而,某些场景需要仅模拟特定的调用,特别是在处理继承时。
考虑以下类层次结构:
<code class="java">class BaseService { public void save() {...} } public Childservice extends BaseService { public void save(){ //some code super.save(); } } </code>
目标是仅模拟对 super.save( 的调用) ) 在 ChildService 类中,在第一次调用时保持原始方法调用不变。
一种方法涉及策略性地使用 Mockito 的间谍() 方法来创建 ChildService 类的模拟。通过对在 super.save() 中调用的 BaseService 类的 validate() 方法进行存根,我们有效地防止了不需要的方法调用:
<code class="java">class BaseService { public void validate(){ fail(" I must not be called"); } public void save(){ //Save method of super will still be called. validate(); } } class ChildService extends BaseService{ public void load(){} public void save(){ super.save(); load(); } } @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>
这种方法有效地隔离了对 super.save( ),同时允许第一次调用原始方法调用。它确保测试专门关注所审查的所需方法。
以上是如何使用 Mockito 模拟来自超类的方法调用:实用指南的详细内容。更多信息请关注PHP中文网其他相关文章!