В моем исследовании об откате транзакций в EF4 кажется, что все обращаются к этому сообщению в блоге или предлагают подобное объяснение. В моем сценарии я желаю сделать это в сценарии поблочного тестирования, где я хочу откатывать практически все, что я делаю в своем контексте поблочного тестирования для удержаний от обновления данных в базе данных (да, мы увеличим счетчики, но это хорошо). Чтобы сделать это, лучше следовать следующему плану? Я пропускаю некоторое понятие или что-либо еще главное с этим (кроме моего SetupMyTest
и PerformMyTest
функции не будут действительно существовать тот путь)?
[TestMethod]
public void Foo
{
using (var ts = new TransactionScope())
{
// Arrange
SetupMyTest(context);
// Act
PerformMyTest(context);
var numberOfChanges = context.SaveChanges(SaveOptions.AcceptAllChangesAfterSave);
// if there's an issue, chances are that an exception has been thrown by now.
// Assert
Assert.IsTrue(numberOfChanges > 0, "Failed to _____");
// transaction will rollback because we do not ever call Complete on it
}
}
Для этого мы используем TransactionScope.
private TransactionScope transScope;
#region Additional test attributes
//
// Use TestInitialize to run code before running each test
[TestInitialize()]
public void MyTestInitialize()
{
transScope = new TransactionScope();
}
// Use TestCleanup to run code after each test has run
[TestCleanup()]
public void MyTestCleanup()
{
transScope.Dispose();
}
Это откатит любые изменения, сделанные в любом из тестов.