java - 如何使用 JUnit 模拟覆盖调用静态方法的方法?

标签 java junit static-methods easymock junit3

考虑两个类 AB

class A {  static int a(){} }

class B {  void something(){ int value=A.a(); .......}}

现在我必须使用 Junit 测试用例来覆盖 B 类,因此我创建了一个新类(class TestB)来覆盖 B 类>.

class TestB {  @Test  public void testsomething(){...} }

我的问题是,是否有任何方法可以覆盖 A.a() 行,因为这是静态方法。我知道我不能轻易模拟它,因为没有涉及任何对象。那么我将如何进行? 我正在使用 JUnit 和 EasyMock。

最佳答案

正如您所指出的,无法使用 easymock 模拟静态方法。

方法 1:尽可能不要使用静态方法。

方法 2:在 easymock 之上使用 PowerMock。

方法 3:通过在 a() 中使用供应商来委托(delegate) A.a() 的主体。您可以为测试用例使用“简单”供应商,为生产使用使用真实世界的供应商。

关于java - 如何使用 JUnit 模拟覆盖调用静态方法的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36441943/

相关文章:

Java 创建一个新的 xml 文件并附加它

java - 使用 powermock 模拟枚举实例化

java - 是什么让这行代码执行?

java - 使用 java selenium xpath 动态查找前一个同级元素

java - 如何使用 FCM 管理聊天应用程序的推送通知

java - 使用 XMLEncoder 序列化 UUID

spring - 无法为 Spring Controller 的 JUnit 测试加载 ApplicationContext

java - if/else 语句失败

静态方法中的python类变量

java - 在 Java 中,这些方法中哪种更好?