DBUnit как защититься от нескольких тестов, выполняемых одновременно?

StackOverflow https://stackoverflow.com/questions/1203758

Вопрос

Я работаю над тестовой средой для проекта и изучаю возможность использования DbUnit.NET для проведения большого тестирования взаимодействия с базой данных.Однако у меня есть один очень важный вопрос:

Мы работаем против Oracle, и настройка отдельного экземпляра тестовой базы данных для каждого разработчика действительно неосуществима (тем более, что у нас есть только 1 администратор базы данных, который уже ограничен во времени).Это означает, что все разработчики и наш сервер непрерывной интеграции должны использовать одну и ту же схему базы данных.

Итак, перейдем к вопросу:есть ли хороший способ предотвратить одновременное тестирование более чем 1 человека?Было бы легко поместить запись в таблицу базы данных, которая указывает, что тест выполняется, а затем удалить ее после завершения тестов, но у NUnit нет никакого способа запустить что-либо в начале и конце тестового сеанса.

Есть еще какие-нибудь мысли?Кажется, что это должна быть довольно распространенная проблема...или все на самом деле запускают отдельные экземпляры БД для каждого разработчика / тестировщика, который может запускать тесты?

Это было полезно?

Решение

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

Мы использовали механизм блокировки базы данных, чтобы фактически ставить тесты в очередь, вместо того, чтобы проваливать тест, когда кто-то другой уже запускает тест. Я думаю, что алгоритм блокировки Oracle немного отличается, поэтому я не знаю, как это будет работать.

Единственное место, где мы столкнулись с проблемами, это когда разработчик хотел пройти тест в режиме отладки. Это заблокировало бы любых других разработчиков, которые хотели запустить тест, пока он не выпустит отладчик. Мы записали имя текущего пользователя в фиктивную таблицу и заставили механизм блокировки напечатать сообщение, если оно заблокировано более чем на 30 секунд: «Боб в настоящее время выполняет тест и последние 5 минут».

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

Другие советы

Вы можете использовать атрибут [TestFixtureSetUp], чтобы добавить свой флаг, который указывает, что тесты выполняются как способ имитации " true " семафор.

Кое-что, что я сделал в задаче, имеющей некоторое сходство с этой:

У программы была конфигурационная переменная, которая была добавлена перед всеми соответствующими элементами.У каждой станции были свои настройки, при правильной настройке конфликтов не возникало.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top