【问题标题】:How can I mock static methods in Java 1.4?如何在 Java 1.4 中模拟静态方法?
【发布时间】:2011-03-03 14:55:02
【问题描述】:

我将 JUnit 与 Mockito 一起使用。 PowerMock 可以模拟静态方法,但似乎无法在 Java 1.4 中使用它,特别是因为它需要注释。

还有其他选择吗?

谢谢。

【问题讨论】:

  • 某人(如果不是您)需要考虑的一种替代方法是升级您的目标 Java 平台。 Java 1.5 / 5.0 于 2004 年问世。
  • 我们正在迁移,但同时我们被 1.4 困住了。
  • 如果您正在迁移,请等到您迁移完毕。在此之前使用简单但丑陋的方法。

标签: java junit mocking java1.4


【解决方案1】:

(这里无耻的自我宣传) 有一个项目PowerMock-Legacy 可让您在 Java 1.4 中使用 PowerMock。它有点冗长,并且并非所有功能都受支持,但可能值得一试。

【讨论】:

  • 看起来不错。尽管我不想模拟静态方法,但这可能是给定问题的最佳答案。
【解决方案2】:

就我个人而言,我更喜欢尽量减少对模拟的使用。如果静态方法在您的代码中,我会对其进行修改以使其对单元测试更加友好。也许它不应该是静态的。或者,如果必须这样做,也许您可​​以使用设置方法来确定静态方法的行为方式。

如果静态方法不在您的代码中,您可能不走运。

【讨论】:

  • 我个人倾向于使用模拟,以便能够进行真正的单元测试。我同意它不应该是静态的,但不幸的是我暂时无法更改它。
【解决方案3】:

尝试jMockit 并仔细检查您是否可以重构代码(或者它是旧代码?)。 Mockito 说关于模拟静态方法

Mockito 更喜欢面向对象和依赖注入,而不是难以理解和更改的静态过程代码。 (Source)

还要查看 this 相关帖子,尤其是 Jon 的回答。

【讨论】:

  • 不幸的是,这是我暂时无法更改的遗留代码。但我同意,长期目标是根本不使用静态方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-23
  • 1970-01-01
相关资源
最近更新 更多