Выполнение отката - тесты интеграции репозитория
Я хочу реализовать интеграционные тесты моих репозиториев, основанных на 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.