2017-02-22 27 views
1
PowerMockito.spy(SomeClass.class); 
PowerMockito.doNothing().when(SomeClass.class); 
SomeClass.StaticVoidMethod(); 

这似乎不起作用。我得到UnfinishedStubbingException。如何存留没有参数的静态void方法?

+0

需要模拟静态方法是一种常见的代码异味,提示您应该将此方法移动到接口或类中,以便您可以引入模拟或伪造实例,并将* that *传入您正在测试的代码中,而不是全局模拟静态方法。 – dimo414

+0

不能更改代码,因为它不是我写的。任何关于如何测试的建议? – mhsree

+1

“这不是我写的。”它来自第三方库?请提供更多细节。 – davidxxx

回答

1

当你真的不能改变“测试中的代码”;而且这个静态调用会给你带来问题,那么你唯一的选择就是使用PowerMock;并作为其他答案大纲,他们的documentation给出了一个确切的描述如何做到这一点(和记录:仔细阅读并按照说明)。

但是你必须明白,与其他嘲讽框架相比,PowerMock“更昂贵”;例如:您无法将PowerMock与Mockito很好地结合在一起。当然有PowerMockito;但该工具只适用于非常过时的Mockito版本。

长话短说:PowerMock可以解决这个问题;但从长远来看,当您为您创建其他问题时,请不要感到惊讶。

+0

谢谢!你是对的! – mhsree

0

你没有完成你的Mockito句子。你忘了告诉存根(stub)它将调用什么方法。

要完成句子...不要忘记最后的方法调用。

PowerMockito.doNothing().when(SomeClass.class).StaticVoidMethod(); 
+0

我还能怎么做? – mhsree

+0

为什么要回答? :) – davidxxx

+0

@mhsree:我修改了答案;我觉得很明显,我所指的是,但现在我意识到情况并非如此。 – Makoto

1

您可以使用

PowerMockito.mockStatic(SomeClass.class) 

这会嘲笑这个类的所有方法。

欲了解更多信息,请通过此链接 https://github.com/powermock/powermock/wiki/MockStatic

干杯!

+0

我试过这个,该方法仍然执行。 – mhsree

+0

@mhsree然后你缺少其中列出的步骤之一。请放心:PowerMock是一个可怕的工具,但是当您正确使用它时,它会完成工作。 – GhostCat

相关问题