类中的Mockito和final equals()方法 - 它是否可以模拟?

时间:2013-10-16 23:20:14

标签: java mocking mockito

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

当我尝试模拟这个类时,我总是从这个方法中获得异常。 CGLIB显然没有得到最后的结果,而且真正的方法被称为。

有什么想法吗?我能做些什么,用Mockito模拟这个课程?也许其他图书馆会处理它?<​​/ p>

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

3 个答案:

答案 0 :(得分:6)

此矩阵显示了不同框架支持的功能: mock framework feature comparison

矩阵here的外部链接。

根据这一点,只有PowerMockJMockit可以模拟最终方法。

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

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

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