Я хочу протестировать класс с подключением db. Класс, который я хочу проверить, принимает как параметр в классе конструктора Connection
. Я хочу передать макет объекта в конструктор. Можете ли вы сказать мне хорошую структуру с примером того, как издеваться над соединением db?
Соединение с базой данных Java mock
Ответ 1
Вы можете использовать MockRunner, который поддерживает JDBC. Общепринятые фреймворки, такие как Mockito, также будут работать, но JDBC - это набор интерфейсов, возвращающихся друг к другу, поэтому ручное издевательство будет сложным. Посмотрите сами: Как заглушить /mock JDBC ResultSet для работы с Java 5 и 6?
Однако насмешливый JDBC настолько хрупкий и многословный (независимо от того, какие инструменты вы используете), что я либо предлагаю абстрагировать доступ JDBC на некотором тонком слое DAO (см. @duffymo ответ), либо перейти в базу данных в памяти, например H2.
См. также:
Ответ 2
Соединение - это интерфейс. Любая издевательская структура сможет издеваться над этим: EasyMock, Mockito,...
Отказываясь, он не отличается от насмешивания какого-либо другого интерфейса Java.
Ответ 3
Я бы не создал макет соединения - на мой взгляд это ничего не доказывает.
Я могу понять, почему вы издеваетесь над репозиторией /DAO после того, как вы полностью протестировали его с помощью прямого соединения. Вы дадите ложный репозиторий /DAO службе или другому клиенту, потому что вы уже протестировали ее - не нужно доказывать, что она работает, пока вы не выполните тест интеграции.
Ответ 4
Вы можете использовать фальшивую структуру, такую как те, что указаны в приведенном выше ответе (я лично использую EasyMock) ИЛИ Создайте свой собственный макет:
class FakeConnection extends Connection{
// Overrive all method behavious you want to fake.
}
Ответ 5
вы можете попробовать easymock. это легко использовать, я думаю. вы можете найти учебник для справки. easymock
Ответ 6
Если вы собираетесь повторно использовать этот макет во многих тестовых случаях, вы также можете рассмотреть возможность реализации своей собственной реализации соединения и повторного использования этой реализации во всем мире.
Ответ 7
Основа Acolyte полезна для таких целей → https://github.com/cchantep/acolyte.
С помощью этой библиотеки вы можете создать экземпляр соединения, для которого вы предоставляете обработчик. Реализуя обработчик, вы можете "отправить" запрос или обновление: создание результирующих наборов или количество обновлений (или предупреждение).