你如何模拟一个使用私有静态内部类作为参数的方法?

时间:2015-06-10 09:15:00

标签: java junit mockito powermock

我有一个带有单个参数的方法的类。这个参数是模拟类中的嵌套类,但它是私有的(并且是静态的,但我不认为这对此有很大影响)。我该如何嘲笑这种方法?

示例:

public class myClass {

    public anotherObject;

    public myClass(AnotherObject anotherObject) {
        this.anotherObject = anotherObject;
    }

    public void exec() {
        //Some instructions ...

        //This second method is inside another completely seperate class.
        anotherObject.secondMethod(new NestedClass());
    }

    private static class NestedClass {
        public NestedClass() {
             //Constructor
        }
        //Variables and methods, you get the picture
    }
}

在上面的示例中,secondMethod(...)是我想要模拟的方法。

所有尝试查找此问题的其他示例只是返回与模拟单个私有嵌套类或模拟静态类相关的结果,这些类与此并不完全相关,并且似乎不提供任何工作我可以想出来。

编辑: 我正在寻找某种类似的解决方案:

@Test
public void testExec() {
    AnotherObject anotherObject = mock(AnotherObject.class);
    when(anotherObject.secondMethod(any(NestedClass.class))).thenReturn(0);

    MyClass testThisClass = new MyClass(anotherObject);
}

注意:我不允许对代码进行修改我担心,我只允许创建这些测试以确保当前的实现在以后对其进行修改时可以正常工作

1 个答案:

答案 0 :(得分:0)

如果我正确理解了要求,请添加一个方法,例如executeSecondMethod()。在main方法类中调用此方法。

public class myClass {
    public void exec() {
    //Some instructions ...

     secondMethod(new NestedClass());
    }

    public void secondMethod(NestedClass example) {
        //Some instructions that I want to just mock out...
    }

    private static class NestedClass {
        //Variables and methods, you get the picture
    }

    public static executeSecondMethod(){
        secondMethod(new NestedClass()); // pass the nested class object here
    }


}

public class mainClass{

    public static void main(){
        executeSecondMethod();
    }
}