Пакет издевательских частных занятий - PullRequest
2 голосов
/ 10 марта 2012

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

MyPackagePrivateDao mockedDao = mock(MyPackagePrivateDao.class);

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

Спасибо

Ответы [ 2 ]

4 голосов
/ 10 марта 2012

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

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

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

3 голосов
/ 12 марта 2012

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

...