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

unit-testing

32 просмотра

1 ответ

297 Репутация автора

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

Я не могу использовать Mock Framework, поскольку он не использует интерфейсы. Нам нужно проверить, что если в одной таблице базы данных есть запись и приложение запущено, то оно должно переместить записи в другую базу данных. Мы также хотим, чтобы после выполнения значения не сохранялись в базе данных. Операция должна быть отменена после завершения контрольного примера.

Автор: Dhanik Lal Sahni Источник Размещён: 19.07.2016 08:54

Ответы (1)


0 плюса

3215 Репутация автора

Из того, как вы сформулируете свой вопрос, не совсем понятно, являются ли тесты, которые вы хотите выполнить, юнит-тестами или интеграционными тестами. Различие заключается не столько в том, изолируете ли вы свой код, а в том, какова цель теста.

Предположение A: Ваша цель тестирования - проверить логику вашего собственного кода. Зависимость от баз данных - это неприятность, и вы бы предпочли, чтобы ваш код был изолирован от баз данных. Однако доступ к базам данных осуществляется не через интерфейсы (в смысле конструкции языка программирования), а напрямую к API-интерфейсам баз данных, возможно, даже к глобальным экземплярам баз данных. И у вас нет возможности изменить код.

В зависимости от языка программирования и среды, которую вы используете, могут быть другие способы замены баз данных на макеты, заглушки или что-то еще: например, вам не нужно ссылаться на исходную библиотеку базы данных. Вместо этого вы можете создать поддельную библиотеку базы данных для ссылки («шов линкера»), которой вы можете управлять из своего тестового кода. Или вы можете заменить вызовы базы данных с помощью препроцессора (в C или C ++), опять же, в поддельную реализацию.

Предположение B: Ваша цель тестирования - убедиться, что взаимодействие между вашим кодом и двумя базами данных работает должным образом. Например, вы хотите быть уверены, что элементы действительно переносятся из одной базы данных в другую.

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

Ваша проблема в предположении B заключается в том, как вы можете убедиться, что каждый тестовый пример запускается и завершается с чистым состоянием. Как этого добиться, судить по небольшой информации, которую вы предоставили, сложно. Вы можете работать с резервными копиями базы данных, чтобы выполнить откат и т. Д., Но варианты во многом зависят от вашей конкретной ситуации.

Автор: Dirk Herrmann Размещён: 22.11.2018 11:14
Вопросы из категории :
32x32