我读到Mockito 2不再使用CGLIB /代理,而是使用ByteBuddy进行模拟创建。这是否意味着从现在开始可以模拟静态方法和私有方法?
答案 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 mocking
到static/private/final methods
甚至像
when(() -> YourClass.staticMethodToCall(...)).thenReturn(...)
这样的东西,只有一个简单的基于lambda的语法,例如:< / p>
window.open("http://example.com");