Соединение с базой данных Java mock
Я хочу протестировать класс с помощью make db connection. Класс, который я хочу проверить, принимает как param в конструкторе Connection
класса. Я хочу передать объект mock конструктору. Можете ли вы сказать мне хороший фреймворк с примером, как издеваться над подключением к БД?
7 ответов
можно использовать MockRunner, который имеет поддержку JDBC. Общие насмешливые рамки, такие как Mockito также будет работать, но JDBC-это набор интерфейсов, возвращающих друг друга, поэтому ручная насмешка будет трудной. Смотрите сами: как заглушить / макет JDBC ResultSet для работы как с Java 5, так и с 6?
однако насмешливый JDBC настолько хрупкий и подробный (независимо от того, какие инструменты вы используете) , что я бы предложил абстрагировать доступ JDBC внутри некоторого тонкого слоя DAO (см. @duffymo ответ) или перейти к базе данных в памяти, как H2.
Читайте также:
Я бы не создавал макет связи - это ничего не доказывает, на мой взгляд.
Я понимаю, почему вы издеваетесь над самим репозиторием / 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 вы можете создать экземпляр соединения, для которого вы предоставляете обработчик. Реализуя обработчик, вы можете "отправить" запрос или обновление: создание результирующих наборов или количество обновлений (или предупреждение).