gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 08:35:17 25 4
gpt4 key购买 nike

无论调用此方法的实例是什么,我都试图模拟一个方法。据我所知,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 进行测试,因为添加这 2 个符号会使我的一些其他测试(不使用 PowerMockito,但仅使用 Mockito)失败。

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

关于java - 使用 PowerMockito 类的所有实例的模拟方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38282542/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com