Как мне высмеять Object.getClass?

Я работаю над проектом Java, хочу написать unit test для метода .equals, который у меня есть в DTO. В методе .equals существует метод .getClass(), вызываемый обоими объектами, находящимися под тестированием. Я хочу издеваться над этим, но я не могу сказать, какой тип объекта он хочет. Я пробовал,

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

но уверен, что черт не сделал ничего. Каков тип возврата getClass и как его можно манипулировать?

Ответ 1

Object.getClass() - окончательный метод, поэтому вы не можете издеваться над ним с помощью Mockito.

Вы можете высмеять статические и окончательные методы (как этот) и даже частные методы с Powermock (это довольно крутой инструмент;)

http://code.google.com/p/powermock/

Вы можете использовать его с Mockito, как описано здесь:

http://code.google.com/p/powermock/wiki/MockitoUsage13

Там вы найдете несколько полезных примеров.

Ответ 2

Поскольку Object.getClass() является окончательным, вы не можете издеваться над этим методом с Mockito. Я бы настоятельно советовал вам реорганизовать ваш код, чтобы ввести класс другим способом. Если это невозможно, вы можете попробовать powermock, где вы можете высмеять любой окончательный метод. Object.getClass() является немного особенным, поэтому не забудьте установить MockGateway.MOCK_GET_CLASS_METHOD = true в powermock.