首页  >  文章  >  Java  >  如何使用 Mockito 模拟来自超类的方法调用:实用指南

如何使用 Mockito 模拟来自超类的方法调用:实用指南

Linda Hamilton
Linda Hamilton原创
2024-11-01 04:42:02755浏览

How to Mock a Method Call from a Superclass with Mockito: A Practical Guide

克服 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn