我如何模拟Object.getClass?

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

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

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

Object.getClass()是一个final方法,所以你不能用Mockito来模拟它。

你可以在https://github.com/powermock/powermock上模拟staticfinal方法(就像这个)甚至private方法和Powermock(它是一个非常酷的工具;)。

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

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