使用powerMock对void方法进行验证

时间:2013-09-25 20:52:28

标签: powermock

在方法中实例化了一个类的本地实例。 例如

  class TestMe{
     public void foo()
     {
       A a = new A();
       a.setState(this);
     }
    }




class A
{
    private B b;

    public void setState(TestMe tm)
    {
        b.doSomething(); //returns void
        b.doSomethingAdditional(); //returns void
    }
}

在测试foo时,使用powerMock,我想进行验证以确保调用doSomething()和doSomethingAdditional()方法。我正在寻找Mockito.verify(ObjectName).functionName()的内容。有什么建议??

1 个答案:

答案 0 :(得分:2)

PowerMock与Mockito合作。您仍应具备使用Mockito呼叫进行验证的所有功能。

模仿B后,当您模拟其功能然后将其传递到A时,您可以使用Mockito.verify

verify(mockBObject).doSomething();
verify(mockBObject).doSomethingAdditional();

这可能需要一些额外的步骤来将模拟对象挂钩到A,因为你没有可以定义B传入的构造函数,或者有一些构造函数可以挂钩。如果您只是在创建AB初始化A,则可以使用一些PowerMockito工具告诉它该做什么。只是嘲笑B是行不通的,因为在设置A时,它不知道在其代码中使用您的模拟对象作为B内部。

PowerMockito.whenNew(B.class).withNoArguments().thenReturn(mockBObject);

截至目前,B永远不会设置或初始化,因此可能会导致一些问题。如果B是您假定的静态单例对象是在其他地方创建的,则可以对静态getInstance()调用进行类似的模拟,以返回模拟B