java - 模拟子类对象和父类(super class)引用

标签 java unit-testing mockito powermockito

这是场景,我的 cls 方法之一中有类似的内容:

public class xyz{
    public Object build(Map map) {

       BaseClass cls;

       if(SomeconditionTrue) {
         cls = new ChildClass1(new ABC());
       } else {
         cls = new ChildClass2(new ABC());
       }

       cls.callMethod();
    }
}

对于上述场景,我正在使用 PowerMockito 编写一个测试用例,我想模拟这个方法调用,cls.callMethod()。当我尝试正常的模拟时,它调用失败的实际方法callMethod()。有人可以帮我模拟该方法调用吗?尝试使用 PowerMockito.stub 和其他一些选项使用几个场景,但它总是调用实际方法。

最佳答案

使用 Powermock 您可以执行以下操作:


    PowerMockito.whenNew(ChildClass1.class)
        .withArguments(any(ABC.class))
        .thenReturn(mockedBaseClass);

    PowerMockito.whenNew(ChildClass2.class)
        .withArguments(any(ABC.class))
        .thenReturn(mockedBaseClass);

当然,我首选的方法是传入一个知道如何创建这些 ChildClass 实例的工厂,然后您可以使用 Mockito 来模拟它,这样会更干净。但是,如果这不是一个选择,希望上述内容应该有效。

关于java - 模拟子类对象和父类(super class)引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41153464/

相关文章:

java - Controller 的 MockMvc 测试用例中出现错误

java - DFS从显式到隐式的堆栈问题

java - 如何为多线程应用程序创建测试环境

django - 需要在 pytest 工厂中覆盖 django auto_now_add

java - Spock 测试线程安全失败

java - 如何在返回 void 类型的公共(public)方法中测试局部变量?

java - 找到差异并将其存储在新数组中?

java - 从 scala 代码使用 java 中定义的递归泛型类型

java - 从intellij-idea导入代码风格格式化设置到eclipse

java - 使用参数映射模拟 jdbctemplate