在我对EF4中的回滚事务的研究中,似乎每个人都引用了this blog post或提供了类似的解释。在我的方案中,我想在单元测试方案中执行此操作,在该方案中,我实际上要回滚我在单元测试上下文中所做的所有事情,以防止更新数据库中的数据(是的,我们将增加计数器,但这没关系)。为此,最好遵循以下计划吗?我是否错过了一些与此相关的概念或其他主要知识(除了我的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();
}
这将回滚任何测试中所做的任何更改。
关于c# - 如何在EF4中回滚以进行单元测试TearDown?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2686454/