我想验证事务是否在出现异常的情况下回滚。下面的方法可能会引发异常。
// method Checkout(user, reduceMoney, addBill)
using (var transaction = _botContext.Database.BeginTransaction())
{
try
{
await FirstDbUpdate(user, reduceMoney);
await SecondDbUpdate(user, addBill); // potential exception
transaction.Commit();
}
catch (Exception ex)
{
// ...
}
}
为了验证回滚,我编写了这个测试:
[Test]
public async Task Test_TransactionFail_RevertedUserUpdate()
{
// Arrange user{budget: 10}
var user = await _userRepository.GetByName("John Doe");
var reduceMoney = 10m;
// Act - null causes an exception
await _service.Checkout(user, reduceMoney, null);
// Assert
var userRetrieved = await _userRepository.GetByName("John Doe");
Assert.AreEqual(10, userRetrieved.Budget);
}
断言失败是因为用户的预算为 0。即看起来更改是持久的,但实际上并非如此(这是正确的行为)。
所以问题是为什么 DbContext 会返回未持久化的数据,它是从哪里得到的?回滚不应该删除它们吗?
慕桂英3389331
相关分类