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

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

17
задан HichemSeeSharp 6 September 2012 в 18:27
поделиться

3 ответа

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

public class IntegrationTestsBase
{
    private TransactionScope scope;

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

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

Удачи.

23
ответ дан 30 November 2019 в 12:06
поделиться

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

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

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

  • Транзакции
  • Перестроить БД
  • Использовать моментальные снимки SQL Server

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

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

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

5
ответ дан 30 November 2019 в 12:06
поделиться

Возможно, это самый простой способ, другой способ — перестроить базу данных в SetUp.

2
ответ дан 30 November 2019 в 12:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: