как выполнить модульный тест уровня DAO (db)?

#unit-testing #junit #tdd

#модульное тестирование #junit #tdd

Вопрос:

поскольку методы уровня dao будут зависеть от данных в базе данных, в сложных системах некоторые операции будут зависеть от множества таблиц, таким образом, модульный тест не будет повторяемым и независимым,

мне интересно, насколько хорошие TDD-слои справляются с этим? спасибо.

Ответ №1:

ИМХО, вы к чему-то клоните… Если вы взаимодействуете со своим Sql Server, то вы выполняете не модульный тест, а интеграционные тесты. Если вы используете TDD, то вы понимаете это и начинаете переводить серверную коммуникацию в оболочку, чтобы вы могли заглушать и имитировать любые тестовые данные, вместо того чтобы использовать фреймворк вроде DBUnit для управления состоянием базы данных. Я думаю, что ваша бизнес-логика не должна напрямую связываться с базами данных — или веб-сервисами, или другими внешними ресурсами. Если это так, скорее всего, вы никогда не напишете ничего, кроме интеграционных тестов.

Комментарии:

1. Это правда, что подобные тесты больше похожи на интеграционные тесты, но независимо от того, какой ярлык вы на него навесите, все равно может возникнуть необходимость в тестировании. Как я упоминал в своем ответе, внедрение СУБД, такой как HSQLDB, исключит взаимодействие с сервером из уравнения, но есть ли лучшие способы убедиться, что такие вещи, как ORM, работают должным образом? Есть ли альтернатива чему-то вроде DBUnit, которая по-прежнему даст вам точную обратную связь о том, не нарушила ли настройка этого отображения гибернации что-то?

Ответ №2:

Платформа тестирования, подобная DBUnit, — это именно то, что вам нужно. С их сайта:

DBUnit — это расширение JUnit (также можно использовать с Ant), предназначенное для проектов, управляемых базами данных, которое, помимо прочего, переводит вашу базу данных в известное состояние между тестовыми запусками. Это отличный способ избежать множества проблем, которые могут возникнуть, когда один тестовый пример повреждает базу данных и приводит к сбою последующих тестов или усугубляет ущерб.

DBUnit также поддерживает различные СУБД, но я мог бы порекомендовать что-то вроде HSQLDB, которое можно встроить в ваш проект / тесты, чтобы ваши модульные тесты не зависели от возможности подключения к базе данных где-нибудь в подвале вашей компании. 🙂 Хотя, с другой стороны, вы будете тестировать с использованием другой СУБД, чем вы использовали бы в производственной среде…