PowerMock 有啥好的替代品吗?
Posted
技术标签:
【中文标题】PowerMock 有啥好的替代品吗?【英文标题】:Are there any good alternatives to PowerMock?PowerMock 有什么好的替代品吗? 【发布时间】:2016-04-27 07:57:01 【问题描述】:我正在测试一些遗留代码并尝试使用 PowerMock 来模拟静态方法调用。我很快发现它与类加载器混淆了,这不是我认为有资格深入研究的问题。仅供参考,我的问题与 this 类似,但发布的解决方案不适用于我的情况。
我可以尝试哪些可以模拟静态、与 TestNG 兼容并成功用于一些现场项目的 PowerMock 替代品?
我知道最好的替代方案是可测试的代码,但并不总是可以重构我当前的项目。
【问题讨论】:
jmockit 是一种选择(可以模拟静态方法) - 它的about page 列出了几种选择。 如果您要添加新的单元测试 - 为什么不利用这个机会重构您想要测试的所有内容以符合合理的测试程序? @rmalchow 我很想一直重构 :) 但目前我们的团队还没有达成一致意见,我们应该在多大程度上接受重构以最大程度地降低破坏风险。同时,我被要求看看是否有其他替代方案不会像 PowerMock 那样引起这么多问题。 @assylias 谢谢,jmockit 看起来很值得一试。 jmockit 的链接不再有效,jmockit 目前在这里:jmockit.github.io 但似乎没有替代列表。 【参考方案1】:你有几个选择:
使用其他允许静态模拟的进程内模拟工具(例如 Mockito (Mockito supports mocking static methods since version 3.4.0))查看您突出显示的问题是否消失。很可能不是工具问题,而是方法问题,所以请阅读下一点。 使用over-the-wire test doubles 而不是进程内模拟,这样您就可以测试您的应用程序黑盒,而不必使用静态模拟或重构代码。您可以通过存根或模拟依赖系统而不是专注于单个类或方法来实现这一点 支持 HTTP 在线存根/模拟的开源工具示例是 Wiremock 支持多种协议(如 HTTP、gRPC 和 JMS)的商业工具示例是 Traffic Parrot 你可以找到更多的工具over-the-wire mocking and stubbing on Wikipedia【讨论】:
以上是关于PowerMock 有啥好的替代品吗?的主要内容,如果未能解决你的问题,请参考以下文章
指南针精灵生成器有啥好的替代品吗? (Rails 精灵生成器)
有啥好的 C++ 项目构建工具可以替代 make 吗? [关闭]