繁体   English   中英

如何模拟和测试这个内部静态类

[英]How to Mock and test this Inner static class

我是Mockito和PowerMock的新手,我真的遇到了麻烦。 这是我的情况:

class A {

  static class B {

    public class B(Object1 o1, Object2 o2) {
        setInSuperClass(o1); // this is private method...
        doSomethingWithInnerClass (new Object3() {

            @Override
            public void retreat() {
                someVar = new Object5(o2);   // someVar is from   superclass and is private, I know I can get it with PowerMock
            }

            @Override
            public boolean doSomething(){
                return true; 
            }

        })

    }
  }
}

我想这可以完成第一个方法的工作....也许我也可以验证一些对象是在超类中设置的并且不再是null,那会没事的?

    @Mock
    Object1 o1;

    @Mock
    Object2 o2;

    public void test() {
         B b = new B(o1, o2);
         PowerMockito.verifyPrivate(b).invoke("setInSuperClass", 1 , o1);
    }

但如何最好地测试doSomethingWithInnerClass ??? 我的意思是,我知道我可以验证它被调用....但这个匿名类参数我想测试。 我很感激你的建议,Thanx

我相信你需要改变你的想法。 例如,而不是验证setInSuperClass使用Powermock调用,您应该验证调用的结果。 有没有设置的字段? 这个领域有吸气剂吗? 是否存在可由此字段驱动的其他行为?

doSomethingWithInnerClass也是如此。 一个不做任何事情的方法调用也可能不存在。 必须有通话结果。 一些输出,调用另一个方法/类或副作用。 验证结果。

如果这确实是不可能的,您可能需要创建内部类的子类以进行测试。 此子类将覆盖被测试方法调用的方法。

您不应该验证私有变量是否已设置。 您应该验证对对象的后续行为产生的影响。 因此,为了运行retreat方法,您需要做什么,然后在封闭对象上调用其他方法,该方法使用该私有变量的值。

如果无法从封闭对象中判断变量已经设置,那么这表明变量本身并不是真正需要的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM