Я хочу реализовать интеграционные тесты моих репозиториев, управляемых Entity Framework. Проблема в том, как откатить состояние базы данных после выполнения тестов. В данный момент я планирую запустить транзакцию в тестовом SetUp и откатить ее в тестовом TearDown. Существуют ли другие решения, кроме очистки базы данных вручную?
Мы делаем это в наших интеграционных тестах при использовании MSTest. Мы используем TransactionScope
и реализуем тестовую настройку и разборку в базовом классе. Это позволяет запускать все интеграционные тесты в рамках транзакции. Базовый класс выглядит примерно так:
public class IntegrationTestsBase
{
private TransactionScope scope;
[TestInitialize]
public void Initialize()
{
this.scope = new TransactionScope();
}
[TestCleanup]
public void TestCleanup()
{
this.scope.Dispose();
}
}
Удачи.
Я думаю, вы на правильном пути....
Вот пример того же с помощью Linq To SQL, который вы можете настроить самостоятельно.
Эта ссылка описывает три варианта:
Далее в сообщении описывается, что транзакции, в то время как самые быстрые привязаны к одному сеансу и может создать некоторые реальные проблемы/ограничения. Используйте, если можете....
Восстановление БД происходит медленно, но определенно выполнимо, но использование моментальных снимков выполняется быстро и позволяет обойти ограничения транзакций.
Если вам нужна очень высокая производительность в ваших автоматических тестах, попробуйте это от того же блоггера. Он описывает использование координатора распределенных транзакций MS для устранения транзакционных ограничений одного сеанса.
Возможно, это самый простой способ, другой способ — перестроить базу данных в SetUp.