繁体   English   中英

使用 PowerMockito 模拟所有类实例的方法

[英]Mocking method for all instances of class with PowerMockito

无论调用此方法的实例是什么,我都试图模拟一个方法。 据我所知,Mockito 不会发生这种情况,应该使用 PowerMockito 来完成,但我无法弄清楚应该如何完成。 我有

public class B{
    public void veryAnnoyingMethod(int i, short s){}
}
public class A{
    public void veryImportantMethod(){
        B newB = new B();
        newB.veryAnnoyingMethod(i,s);
        ...
    }
}

我正在尝试测试veryImportantMethod()并想模拟veryAnnoyingMethod() 我不想像这里解释的那样模拟构造函数: Mocking methods of local scope objects with Mockito因为除了veryAnnoyingMethod()我需要newB功能齐全。

我想出了类似的东西:

B dummyB = PowerMockito.spy(new B());
PowerMockito.doReturn(null).when(dummyB.veryAnnoyingMethod(Mockito.anyInt(), Mockito.anyShort()));

但它抛出异常,我认为这不是我真正需要的。

更新

阅读更多内容后,似乎我必须使用PowerMockito.stubPowerMockito.supress 所以我尝试了以下方法:

PowerMockito.stub(PowerMockito.method(B.class, "veryAnnoyingMethod", int.class, short.class)).toReturn(null);

或者

PowerMockito.supress(PowerMockito.method(B.class, "veryAnnoyingMethod", int.class, short.class));

但是无论是哪种方法仍然会被执行

好的,我终于让它工作了。 使用stubsuppress任何一个都有效。 测试看起来像这样:

@RunWith(PowerMockRunner.class)
@PrepareForTest(B.class)
class TestClassAWithPowerMockito{
    @Test
    public void testVeryImportantMethod() throws Exception {
        A a = new A();
        PowerMockito.suppress(PowerMockito.method(B.class, "veryAnnoyingMethod", int.class, short.class));
        a.veryImportantMethod();
        ...
    }
}

请注意@RunWith(PowerMockRunner.class)@PrepareForTest(B.class)我不得不在单独的类中使用 PowerMockito 进行测试,因为添加这两个符号进行了我的其他一些测试(不使用 PowerMockito,而只使用 Mockito)失败。

希望这很清楚,并帮助那些正在努力解决类似问题的人。

暂无
暂无

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

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