【问题标题】:How to mock final class in java by using EasyMock?- Junit test如何使用 EasyMock 在 Java 中模拟最终类?- Junit 测试
【发布时间】:2014-01-18 11:25:10
【问题描述】:

我有最终类和构造函数...

我无法模拟这个类。我开始知道我不能在最后一堂课上使用 EasyMock。但在我的项目中,我应该只使用easymock。有没有办法模拟这个类?你能请任何人帮助我吗?

//A a = createMock(A.class);//IllegalException occuring while running this test case


For example :

final class A {

private int a;
  A(int a){
this.a = a;
}

}

【问题讨论】:

  • 你可以提取它的接口,然后到处使用这个接口,然后模拟新的接口。
  • 一开始为什么是final?
  • 它的客户端代码作为最终类。所以我不能改变。因此我很挣扎

标签: java junit easymock


【解决方案1】:

用纯 EasyMock 模拟 final 类是不可能的。您必须添加类似PowerMock 的内容,它与EasyMock 集成得很好。或者您编写一个不需要模拟最终类的测试。

【讨论】:

  • PowerMock.mockStatic(MyFinalClass); 是我正在做的事情,我收到一条错误消息,上面写着“不能继承最终类”。我做错了吗?
  • 但是我没有找到 powerMock 对 java11 的支持你有什么建议吗?
【解决方案2】:

我能想到的最好的方法是,如果您的最终类实现了任何接口(考虑到该接口包含您需要在测试中使用的方法),您始终可以创建实现相同接口的另一个类的实例并使用这作为模拟或使用dynamic proxies。

问题在于,当您已经知道 PowerMock 之类的工具已经存在时,有时找到满足需求的变通方法会使做某事所需的工作量成倍增加。

【讨论】:

  • “你总是可以创建另一个实现相同接口的类的实例并将其用作模拟” - 如果你有接口,那么为什么不模拟接口呢?这才是重点。如果您只想使用模拟,则无需创建存根实现。
猜你喜欢
  • 2012-03-30
  • 2011-04-11
  • 1970-01-01
  • 2018-02-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多