Подтвердить что ты не робот

Соединение с базой данных Java mock

Я хочу протестировать класс с подключением db. Класс, который я хочу проверить, принимает как параметр в классе конструктора Connection. Я хочу передать макет объекта в конструктор. Можете ли вы сказать мне хорошую структуру с примером того, как издеваться над соединением db?

4b9b3361

Ответ 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.

С помощью этой библиотеки вы можете создать экземпляр соединения, для которого вы предоставляете обработчик. Реализуя обработчик, вы можете "отправить" запрос или обновление: создание результирующих наборов или количество обновлений (или предупреждение).