Пакет издевательских частных занятий
Использование Mockito или другого аналогичного фреймворка. Есть ли способ издеваться над закрытым пакетом? Я пытаюсь проверить мой уровень обслуживания, высмеивая мои классы DAO. Проблема в том, что экземпляры DAO являются частными пакетами и могут быть получены только через фабрику.
MyPackagePrivateDao mockedDao = mock(MyPackagePrivateDao.class);
Компилятор говорит, что к классу нельзя получить доступ снаружи пакета. У вас есть пример?
Спасибо
2 ответа
Это невозможно с Mockito, для этого требуется изменить байт-код фактического класса. Это не запланированная функция.
Разве у вас нет интерфейсов, которые вы могли бы в итоге использовать для этих DAO?
Другой вариант - взглянуть на PowerMock, который отлично подходит для работы с унаследованным кодом, т. Е. Когда дизайн программного обеспечения заставляет вас высмеивать статические, частные, окончательные и т. Д.
Предположительно, ваша проблема в том, что ваше SUT (и, следовательно, его тест) находится в другом пакете, чем тот класс, который вы хотите смоделировать, иначе проблем не было бы.
Чтобы решить эту проблему, нужно написать статический служебный метод в тестовом классе для класса, который вы хотите смоделировать. Этот служебный метод должен просто создать и вернуть макет нужного класса, что он может сделать, потому что он находится в нужном пакете. Затем вы можете вызвать вспомогательный метод вместо вызова mock(MyPackagePrivateDao.class)
,