我如何模拟Object.getClass?

tam*_*ren 15 java mockito

我正在研究一个Java项目想要为DTO中的.equals方法编写单元测试.在.equals方法中,有一个.getClass()方法被两个被测对象调用.我想嘲笑这个,但我不知道它想要什么类型的对象.我试过了,

when(mockRoomInv.getClass()).thenReturn(RoomInv.class);

但肯定是没有做任何事情.getClass的返回类型是什么,我该如何操作它?

Ale*_*øld 9

由于Object.getClass()是决赛,你不能嘲笑与该的Mockito的方法.我强烈建议你重构代码以另一种方式注入类.如果那是不可能的,你可以尝试使用powermock,在那里你可以模拟任何最终方法.Object.getClass()有点特别,所以一定要设置MockGateway.MOCK_GET_CLASS_METHOD = true在powermock中.


Mr.*_*art 6

Object.getClass()是一种final方法,因此您无法使用Mockito对其进行模拟。

您可以在https://github.com/powermock/powermock上使用Powermock 模拟staticfinal方法(如上),甚至可以private使用Powermock方法(这是一个非常酷的工具;)。

您可以将其与Mockito一起使用,如Mockito Wiki文章中所述。在那里,您将找到一些有用的示例。