1

我想使用 Mockito 从其他库中模拟一个类。我读到 Mockito 依赖于 equals 方法的特定(我认为是 CGLIB 提供)实现。不幸的是,这个外部类有用 final 修饰符表示的 equals(),并且它的主体中存在抛出异常。

当我尝试模拟这个类时,我总是从这个方法中得到异常。CGLIB 显然不能通过 final,并且调用了真正的方法。

有任何想法吗?我能做些什么来使用 Mockito 模拟这个类?也许其他图书馆会处理它?

[编辑] 快速解释:我不想模拟 equals(),我检查了其他方法。问题是 mockito 内部使用 equals(),我不知道是为了什么。由于 equals() 是最终的,所以调用真正的方法时会抛出异常。我希望在 mockito 中有一些设置“不要使用 equals()”:-) 感谢您的回答,我明天会仔细阅读它们。

4

3 回答 3

6

该矩阵显示了不同框架支持的功能: 模拟框架功能比较

此处为矩阵的外部链接。

据此,只有PowerMockJMockit可以模拟 final 方法。

于 2013-10-16T23:46:38.700 回答
2

Mockito 不能模拟最终方法。显然PowerMock可以。

一个 hacky 解决方法可能是创建一个非最终方法,该方法委托给最终equals方法并模拟它。

于 2013-10-16T23:25:34.140 回答
1

我相信使用 PowerMock 和 Mockito API 模拟最终方法的步骤是:运行您的测试,@RunWith(PowerMockRunner.class)然后准备您要模拟的类@PrepareForTest(ClassToBeMocked.class)。之后,模拟您的对象并使用该when方法来模拟该equals方法。

PrepareForTest我认为如果您不在测试类中使用注释,它将不起作用。

于 2013-10-17T00:40:20.750 回答