我们现在可以用Mockito 2模拟静态方法吗?

时间:2017-03-20 17:03:00

标签: junit mocking mockito

我读到Mockito 2不再使用CGLIB /代理,而是使用ByteBuddy进行模拟创建。这是否意味着从现在开始可以模拟静态方法和私有方法?

2 个答案:

答案 0 :(得分:7)

不,你不能(见他们的文件here;我相信他们会提到这一点。)

因此,PowerMock(ito)和JMockit是支持模拟静态方法的两个模拟框架。

但是,有些个人观点:不过应该使用Mockito而不是PowerMock(ito);只需编写可以用Mockito测试的代码;并且不需要PowerMock。我的意思是:当您编写自己的代码时,您认为需要来模拟静态调用;然后你正在写难以测试代码。

答案不是寻找强大的模拟框架;但要编写易于测试的代码。您可以查看这些videos以了解如何执行此操作。

最后:不要认为PowerMockito是一个不错的选择。 Mockito现在版本为2.79(截至2017年3月)。但是当你看看PowerMockito时;你会发现它带有一些Mockito 2.0.42测试版的东西 - 因为PowerMockito的人不能让他们的工具使用任何更新版本的Mockito。这是一种耻辱,因为那些较新的Mockito版本有很多有趣的功能。

答案 1 :(得分:-2)

我写了Mockito 2 AspectJ使用allow mockingstatic/private/final methods甚至像 when(() -> YourClass.staticMethodToCall(...)).thenReturn(...) 这样的东西,只有一个简单的基于lambda的语法,例如:< / p>

window.open("http://example.com");