2016-08-08 4 views
0

Я новичок в тестировании и задавался вопросом, как я буду издеваться над этим с помощью mockito.Как насмехаться с литым объектом

uDAO = (UserDAO) dao; 

где дао определяется как

protected DAO<T, Long> dao; 

Спасибо!

+0

Проблема: если что-то по наследству, чем вы будете иметь трудное время насмешливого его. Реальное решение заключается в том, чтобы использовать инъекцию зависимостей, чтобы гарантировать, что вы можете предоставить соответствующий объект вашему суперклассу в некоторой зависимости. – GhostCat

+0

как вы можете инициализировать «dao»? – kuhajeyan

ответ

1

Чтобы добавить mocks для частных и защищенных полей (которые не имеют общедоступного метода setter), вы должны использовать отражения. Используя отражения, вы можете установить издевательский объект вместо этого защищенного поля. Ниже приведен образец кода для релизов.

Field hack = <PUT YOU CLASS NAME>.class.getDeclaredField("dao"); 
hack.setAccessible(true); 
hack.set(<Object of the class where you are injecting the mock>,<the mock object>); 

Чтобы создать высмеивал объект, который вы можете использовать регулярные PowerMockito.mock или Mockito.mock функции.

Для получения дополнительной информации о отражениях взглянуть на ссылках ниже:

Is it possible in Java to access private fields via reflection http://www.java2s.com/Code/Java/Reflection/Setprivatefieldvalue.htm

Смежные вопросы