Тестирование хранимых процедур с использованием MSTest (.Net) - PullRequest
0 голосов
/ 06 ноября 2010

Мы поддерживаем MS SQL Server 2008 (возможно, 2005), Oracle, а также Sybase. Существует большой скрипт, который принимает AWHILE, который будет создавать таблицы, хранимые процедуры, представления, триггеры и т. Д., А также заполнять таблицы тем, что мы считаем разумными данными.

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

Трудной частью является поддержание надлежащего состояния базы данных до и после выполнения теста, даже если возникают какие-либо исключения. Да, я могу использовать оператор using вместе с 'IDisposable'. Сложнее всего для меня (по крайней мере, основываясь на том, что я делаю и еще не знаю о программировании): как безопасно и многократно восстанавливать состояние баз данных MS SQL, Oracle и Syabse тысячи раз? Я не должен предполагать, что только один пользователь использует его в любой момент времени, хотя я готов это рассмотреть. Я надеюсь, что все 3 базы данных предоставляют механизмы для этого, и мне нужно только запустить их, используя правильный драйвер (мы уже тестировали ODBC - похоже, он работает для нас).

Пожалуйста, оставляйте свои предложения и вопросы, если они у вас есть.

1 Ответ

2 голосов
/ 06 ноября 2010

Существует несколько решений этой проблемы:

  1. Запускать скрипт создания данных базы данных после каждого теста. Вам нужно только создать данные, а не таблицы, хранимые процедуры и триггеры. Они должны оставаться статичными во время выполнения ваших тестов. Если создание данных все еще занимает слишком много времени, это не сработает.

  2. Изолировать сценарии создания данных по таблице и воссоздать данные таблицы, необходимые для каждого тестового устройства, и запускать эти сценарии только перед каждым тестом в этой конкретной функции. Это ускорит процесс, но вы по-прежнему создаете набор данных перед каждым тестом и все еще можете быть слишком медленными для выполнения перед каждым тестом.

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

...