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

标签 java junit mocking mockito powermock

我是 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; 
            }

        })

    }
  }
}

我猜这会完成第一个方法的工作....也许我还可以验证某些对象在父类(super class)中设置并且不再为 null,这样就可以了吗?

    @Mock
    Object1 o1;

    @Mock
    Object2 o2;

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

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

最佳答案

我认为您需要重新思考。例如,您不应验证是否使用 Powermock 调用了 setInSuperClass,而应验证调用的结果。是否有设置的字段?这个领域有 setter/getter 吗?是否有其他可以验证的由该字段驱动的行为?

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

如果这真的不可能,您可能需要创建一个内部类的子类来进行测试。该子类将覆盖被测方法调用的方法。

关于java - 如何模拟和测试这个内部静态类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19618170/

相关文章:

java - Linux 命令 "logname"在 Java 中不起作用

文件系统的Java和Junit集成测试

Python 模拟单元测试断言 Mysql 结果集

JavaFX - 迭代每行 GridPane 节点 - 读取每行 GridPane 节点

java - 如何从列表中检索所有最大值?

java - 朱单元 5 : build from source leads to exception

python - 确定 unittest.mock.patch 的目标

java - 如何使用 JMock 在模拟方法内测试模拟方法

java - PraseGeoPoint 不检索位置 Android 内的图像

java - JUnit:是否可以在任何断言函数中输出多行消息?