我想使用Mockito从其他库中模拟一个类。我读到Mockito依赖于equals方法的特定(我认为CGLIB提供)实现。不幸的是,这个外部类有equals()用final修饰符表示,并且在它的主体中有抛出异常。
当我尝试模拟这个类时,我总是从这个方法中获得异常。 CGLIB显然没有得到最后的结果,而且真正的方法被称为。
有什么想法吗?我能做些什么,用Mockito模拟这个课程?也许其他图书馆会处理它?</ p>
[编辑]快速解释:我不想模拟equals(),我检查其他方法。问题是mockito内部使用equals(),我不知道为了什么。由于equals()是最终的,因此使用异常抛出调用实际方法。我希望mockito中有一些设置“不要使用equals()”:-) 谢谢你的回答,明天我会仔细阅读。
答案 0 :(得分:6)
答案 1 :(得分:2)
Mockito无法模拟最终方法。显然PowerMock可以。
一个hacky解决方法可能是创建一个非final方法,委托给最终的equals
方法并模拟它。
答案 2 :(得分:1)
我相信使用PowerMock和Mockito API模拟最终方法的步骤是:使用@RunWith(PowerMockRunner.class)
运行测试,然后准备要模拟的类@PrepareForTest(ClassToBeMocked.class)
。之后,模拟您的对象并使用when
方法模拟equals
方法。
如果您不在测试类中使用PrepareForTest
注释,我认为它不会起作用。