我如何模拟Object.getClass?

时间:2012-10-30 13:51:50

标签: java mockito

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

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

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

2 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:5)

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

你可以在https://github.com/powermock/powermock处使用Powermock(这是一个非常酷的工具)来模拟staticfinal方法(就像这一个)甚至是private方法。< / p>

您可以按照in the Mockito wiki article的说明将其与Mockito一起使用。你会在那里找到一些有用的例子。