Пакет издевательских частных занятий

Использование Mockito или другого аналогичного фреймворка. Есть ли способ издеваться над закрытым пакетом? Я пытаюсь проверить мой уровень обслуживания, высмеивая мои классы DAO. Проблема в том, что экземпляры DAO являются частными пакетами и могут быть получены только через фабрику.

MyPackagePrivateDao mockedDao = mock(MyPackagePrivateDao.class);

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

Спасибо

2 ответа

Решение

Это невозможно с Mockito, для этого требуется изменить байт-код фактического класса. Это не запланированная функция.

Разве у вас нет интерфейсов, которые вы могли бы в итоге использовать для этих DAO?

Другой вариант - взглянуть на PowerMock, который отлично подходит для работы с унаследованным кодом, т. Е. Когда дизайн программного обеспечения заставляет вас высмеивать статические, частные, окончательные и т. Д.

Предположительно, ваша проблема в том, что ваше SUT (и, следовательно, его тест) находится в другом пакете, чем тот класс, который вы хотите смоделировать, иначе проблем не было бы.

Чтобы решить эту проблему, нужно написать статический служебный метод в тестовом классе для класса, который вы хотите смоделировать. Этот служебный метод должен просто создать и вернуть макет нужного класса, что он может сделать, потому что он находится в нужном пакете. Затем вы можете вызвать вспомогательный метод вместо вызова mock(MyPackagePrivateDao.class),

Другие вопросы по тегам