Управление данными теста. Можете ли вы подключить все соединения БД в одну транзакцию? - PullRequest
2 голосов
/ 27 марта 2009

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

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

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

Мне было интересно, можно ли каким-то образом присоединить все соединения с базой данных к одной транзакции и откатить их позже? Это, вероятно, должно произойти на самом уровне БД.

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

1 Ответ

3 голосов
/ 27 марта 2009

Если запустить, в процессе , экземпляр веб-сервера разработки Visual Studio, а затем запустить тест WatiN, то вы можете заключить тест в один блок, например:

using (new TransactionScope())
{
    var server = new Server(PORT_NUMBER, VIRTUAL_PATH, PHYSICAL_PATH);
    server.Start();
    try
    {
        using (var ie = new IE())
        {
            // TODO: perform necessary testing using ie object
        }
    }
    finally
    {
        server.Stop();
    }
}

и все ваши подключения к базе данных будут теоретически подключены к одной распределенной транзакции, и все их изменения будут отменены при удалении TransactionScope.

Чтобы запустить веб-сервер dev в процессе, вам нужно извлечь WebDev.WebHost.dll из GAC и сослаться на него в своем проекте - это источник класса Server в приведенном выше фрагменте. Пожалуйста, дайте мне знать, если вам нужны более подробные инструкции.

Вам необходимо убедиться, что MSDTC работает, и если между вами и базами данных есть брандмауэры, то в зависимости от настроек порта вы можете столкнуться с трудностями. Еще один дополнительный бонус запуска сервера в процессе заключается в том, что тесты WatiN теперь могут помочь в измерении покрытия кода.

...