过去,我在创建如下所示的数据访问/存储库代码时为简单的 CRUD 操作编写了单元测试:
using(var connection = new WhateverConnection(connectionString))
{
connection.Open();
using(var transaction = connection.BeginTransaction())
{
try
{
//test the CRUD operation
}
finally
{
//gets rid of any stuff created during the test
transaction.Rollback();
}
}
}
今天我在搞乱 EF4 Code First,我意识到我不知道这个测试场景是如何在实体框架词典中翻译的。似乎,如果我调用DbContext.SaveChanges()
,它会保存并提交,无论是否AcceptAllChanges()
被调用。即使使用ObjectContext
而不是DbContext
,我也无法弄清楚如何在不手动清理创建的任何模拟/测试对象的情况下重新创建这个简单的测试场景。我确实在 MSDN 上阅读了这篇文章,但TransactionScope
也没有真正的Rollback
类型方法。我是否使用TransactionScope
并且从不打电话Complete
? 是否有另一种方法或方式使用 DbContext 和/或 ObjectContext 以便在单元测试期间回滚?我是否需要使用 EF4 Code First 完全重新调整我对 TDD 的思考?