java - Mockito 如何仅模拟父类(super class)方法的调用

标签 java mockito

我在一些测试中使用 Mockito。

我有以下类(class):

class BaseService {  
    public void save() {...}  
}

public Childservice extends BaseService {  
    public void save(){  
        //some code  
        super.save();
    }  
}   

我只想模拟 ChildService 的第二次调用 (super.save)。第一次调用必须调用真正的方法。有办法做到这一点吗?

最佳答案

如果您确实没有重构的选择,您可以模拟/ stub super 方法调用中的所有内容,例如

    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();
    }

关于java - Mockito 如何仅模拟父类(super class)方法的调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47966724/

相关文章:

java - Mockito 监视 HSQLDB 连接

java - Mockito 重新 stub 方法已经用 thenthrow stub

java - MockitoException - 是一个 *void 方法*,它 *不能* 用 *返回值* stub !

java - 软删除 : Child Entity not being deleted after Deleting parent Entity in @OneToMany relation in Spring Boot JPA Hibernate

java - 我们应该将每个对象都暴露为 spring bean 吗?

java - PNG 中的方波 DFT

java.lang.NoSuchMethodError : org. apache.fontbox.afm.AFMParser.parse()V

mocking - 如何验证链式方法调用?

java - Mockito:无法模拟静态和非静态方法

java - 如何使用Java streams和reduce()获取Map的key和value的计算总和?