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

Я хочу протестировать класс с помощью make db connection. Класс, который я хочу проверить, принимает как param в конструкторе Connection класса. Я хочу передать объект mock конструктору. Можете ли вы сказать мне хороший фреймворк с примером, как издеваться над подключением к БД?

7 ответов


можно использовать MockRunner, который имеет поддержку JDBC. Общие насмешливые рамки, такие как Mockito также будет работать, но JDBC-это набор интерфейсов, возвращающих друг друга, поэтому ручная насмешка будет трудной. Смотрите сами: как заглушить / макет JDBC ResultSet для работы как с Java 5, так и с 6?

однако насмешливый JDBC настолько хрупкий и подробный (независимо от того, какие инструменты вы используете) , что я бы предложил абстрагировать доступ JDBC внутри некоторого тонкого слоя DAO (см. @duffymo ответ) или перейти к базе данных в памяти, как H2.

Читайте также:


подключения-интерфейс. Любой издевательский фреймворк сможет издеваться над ним:EasyMock, Mockito, ...

издевательство это не отличается от издевательства над любым другим интерфейсом Java.


Я бы не создавал макет связи - это ничего не доказывает, на мой взгляд.

Я понимаю, почему вы издеваетесь над самим репозиторием / DAO после того, как вы полностью протестировали его с помощью живого соединения. Вы бы дали макет репозитория / DAO службе или другому клиенту, потому что вы уже протестировали его - не нужно доказывать, что он работает, пока вы не сделаете интеграционный тест.


вы можете использовать насмешливую структуру, такую как упомянутые в приведенном выше ответе (я лично использую EasyMock) или создайте собственный макет объекта:

class FakeConnection extends Connection{
       // Overrive all method behavious you want to fake.
}

вы можете попробовать easymock. думаю, он прост в использовании. вы можете найти учебник для справки. easymock


Если вы собираетесь повторно использовать этот макет во многих тестовых случаях, вы также можете рассмотреть возможность реализации собственной реализации соединения и повторно использовать эту реализацию везде.


Acolyte framework полезен для таких целей -> https://github.com/cchantep/acolyte .

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