带回滚的 C# 集成测试
C# Integration testing with rollback
我尝试使用回滚进行集成测试。我使用 SQL 服务器。我从这个 topic 中获取的设置如下所示:
private TransactionScope scope;
[TestInitialize]
public void Initialize()
{
this.scope = new TransactionScope();
}
[TestCleanup]
public void TestCleanup()
{
this.scope.Dispose();
}
检测方法:
var newUser = new UserDetailModel();
newUser.Id = 1;
newUser.Email = "test@test.cz";
newUser.FirstName = "Test";
newUser.LastName = "User";
newUser.UserName = "test.user";
await userManager.AddAsync(newUser);
测试完成后数据库中不应该有新用户,但即使测试完成我在数据库中也有新用户。我什至用 Database.BeginTransaction():
尝试了相同的方法
using (var transaction = unitOfWork.GetDbContext().Database.BeginTransaction())
{
var newUser = new UserDetailModel();
newUser.Id = 1;
newUser.Email = "test@test.cz";
newUser.FirstName = "Test";
newUser.LastName = "User";
newUser.UserName = "test.user";
await userManager.AddAsync(newUser);
transaction.Rollback();
}
回滚也不行。
要使 TransactionScope 和异步正常工作,请使用 .NET 4.5.1。或更高版本并且您必须通过像这样指定 TransactionScopeAsyncFlowOption.Enabled
来显式选择跨线程延续的事务流:
new TransactionScope(TransactionScopeAsyncFlowOption.Enabled)
阅读有关该主题的更多信息:https://particular.net/blog/transactionscope-and-async-await-be-one-with-the-flow
我尝试使用回滚进行集成测试。我使用 SQL 服务器。我从这个 topic 中获取的设置如下所示:
private TransactionScope scope;
[TestInitialize]
public void Initialize()
{
this.scope = new TransactionScope();
}
[TestCleanup]
public void TestCleanup()
{
this.scope.Dispose();
}
检测方法:
var newUser = new UserDetailModel();
newUser.Id = 1;
newUser.Email = "test@test.cz";
newUser.FirstName = "Test";
newUser.LastName = "User";
newUser.UserName = "test.user";
await userManager.AddAsync(newUser);
测试完成后数据库中不应该有新用户,但即使测试完成我在数据库中也有新用户。我什至用 Database.BeginTransaction():
尝试了相同的方法using (var transaction = unitOfWork.GetDbContext().Database.BeginTransaction())
{
var newUser = new UserDetailModel();
newUser.Id = 1;
newUser.Email = "test@test.cz";
newUser.FirstName = "Test";
newUser.LastName = "User";
newUser.UserName = "test.user";
await userManager.AddAsync(newUser);
transaction.Rollback();
}
回滚也不行。
要使 TransactionScope 和异步正常工作,请使用 .NET 4.5.1。或更高版本并且您必须通过像这样指定 TransactionScopeAsyncFlowOption.Enabled
来显式选择跨线程延续的事务流:
new TransactionScope(TransactionScopeAsyncFlowOption.Enabled)
阅读有关该主题的更多信息:https://particular.net/blog/transactionscope-and-async-await-be-one-with-the-flow