Задать вопрос
Namelles_One
@Namelles_One
Программист

Тестирование wrapper-а для БД

Давно уж ведется разработка решения для СЭД DocsVision. Часть кода накрыта тестами, в определенный момент появилось желание остановиться, провести рефакторинг всего, что уже написано и накрыть тестами максимум логики.

Проблема в разрывании зависимости с БД. Сейчас взаимодействие с БД выглядит так — получаем объект типа CardData (содержащий в себе словарь всех данных из разных таблиц, составляющих объект Card) и передаем его в сгенерированный класс-wrapper, который предоставляет все данные в виде своих property, используя CardData в качестве низкоуровневого объекта для доступа к БД.

Структура БД является «черным ящиком» и не документирована.

Вопрос — каким образом наиболее правильно уходить от связи с БД в тестах? Вычленить интерфейс каждого wrapper-класса, создать по нему mock-объекты и использовать в реальном коде настоящие объекты, а в вызове через тесты — фейковые? Или возможно как-то проще?

И, откуда брать данные для объектов — заполнять руками в конструкторах для тестов или как?
И так ли плохо использование реальных объектов при тестировании в данном случае — когда структура БД не документирована?
  • Вопрос задан
  • 3105 просмотров
Подписаться 2 Оценить Комментировать
Ответ пользователя LuciferOverLondon К ответам на вопрос (3)
@LuciferOverLondon
По поводу «откуда брать данные для объектов — заполнять руками в конструкторах для тестов или как?»

Базу забить можно и автоматически, генерируя объекты/записи со сколько-нибудь адекватными данными. Строки можно генерировать либо просто случайные, либо по словарю, либо — библиотеками для генерации псевдоосмысленных строк (на хабуро недавно пролетала такая в q&a, кажется).

Другое дело, что в тестах вам нужно тестировать поведение кода при определенных условиях, а значит — нужно прямо в них класть в базу то, что будете тестировать. С учетом граничных условий, обработки ошибок и т.д. Следовательно, надо либо прописывать вручную то, что должно попасть в базу перед тестом, либо, если в тесте нужен большой объем данных — сгенерировать его заранее, и переносить, например, из подготовленного xml/json в тестовую базу.
Ответ написан
Комментировать