【问题标题】:How to Mock Static Methods in Easymock如何在 Easymock 中模拟静态方法
【发布时间】:2014-11-19 04:53:55
【问题描述】:

模拟一个由某个类实现的接口方法很容易,但是如果有一个类并且有一个静态方法,那么我们如何在easymock的帮助下模拟它??

假设是一个类 A 并且有一个 void returred 方法作为 public static void methodA(some args..){}

    class A {
public static void methodA(//some args..){
//some logic
}
}

我们如何在 EasyMock 的帮助下模拟 A 的方法 methodA

【问题讨论】:

  • 不,你不能。您将需要其他一些库的帮助,例如 Powermock(可以与 easymock 协同工作)。 Jmockit 是一个很棒的库,它提供了许多其他的静态模拟功能,可以说是最好的模拟库。

标签: android unit-testing easymock


【解决方案1】:

正如评论中提到的 mystarrocks,您可以使用 PowerMock 模拟静态方法,甚至您也可以测试最终类/方法和私有方法!

来自文档:

PowerMock 是一个扩展其他模拟库的框架,例如 EasyMock 具有更强大的功能。 PowerMock 使用自定义 类加载器和字节码操作以启用静态模拟 方法,构造函数,最终类和方法,私有方法, 移除静态初始化器等等。

例如:

public class IdGenerator {

   /**
    * @return A new ID based on the current time.
    */
   public static long generateNewId() {
      return System.currentTimeMillis();
   }
}

然后您可以使用以下方法模拟此静态方法:

// This is the way to tell PowerMock to mock all static methods of a
// given class
mockStatic(IdGenerator.class);

/*
 * The static method call to IdGenerator.generateNewId() expectation.
 * This is why we need PowerMock.
 */
expect(IdGenerator.generateNewId()).andReturn(expectedId);

查看Mocking static methods 获取完整示例。

【讨论】:

    猜你喜欢
    • 2011-03-10
    • 1970-01-01
    • 2017-05-19
    • 1970-01-01
    • 1970-01-01
    • 2016-12-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多