Выполнение отката - тесты интеграции репозитория

Я хочу реализовать интеграционные тесты моих репозиториев, основанных на Entity Framework. Проблема заключается в том, как выполнить резервное копирование состояния базы данных после завершения тестов. На данный момент я планирую начать транзакцию при тестировании SetUp и отбросить ее обратно на тест TearDown. Существуют ли другие решения, кроме ручной очистки баз данных?

Ответы

Ответ 1

Мы делаем это в наших интеграционных тестах при использовании MSTest. Мы используем TransactionScope и реализуем тестовую настройку и отключение в базовом классе. Это позволяет запускать все интеграционные тесты в рамках транзакции. Базовый класс выглядит примерно так:

public class IntegrationTestsBase
{
    private TransactionScope scope;

    [TestInitialize]
    public void Initialize()
    {
        this.scope = new TransactionScope();
    }

    [TestCleanup]
    public void TestCleanup()
    {
        this.scope.Dispose();
    }
}

Удачи.

Ответ 2

Я думаю, что ты на правильном пути....

Вот пример, делающий то же самое с Linq To SQL, который вы можете tweek для себя.

Эта ссылка описывает три варианта:

  • Сделки
  • Восстановить DB
  • Использовать снимки SQL Server

Далее описывается, что транзакции в то время как самые быстрые привязаны к одному сеансу и могут создавать некоторые реальные проблемы/ограничения. Используйте, если можете...

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

Если вам нужна очень высокая производительность в ваших автоматизированных тестах попробуйте это из того же блогара. Он описывает использование MS Distributed Transaction Coordinator для устранения транзакционных ограничений одного сеанса.

Ответ 3

Проблема с открытием TransactionScope в Setup и Disposing в TearDown заключается в том, что вы НЕ проверяете фиксацию!

Ответ 4

Это, наверное, самый простой способ, другой способ - восстановить базу данных в SetUp.