【发布时间】:2010-11-26 13:03:39
【问题描述】:
我知道这个问题以前一直在问,但我还没有找到真正有效的答案。
当我的单元测试尝试调用使用 Linq 查询数据库的 Web 服务时,出现了我的问题。
单元测试是这样设置的:
[TestInitialize]
public void SetUp()
{
var scope = new TransactionScope(TransactionScopeOption.Required,TimeSpan.MaxValue);
var database = new DatabaseDataContext();
}
[TestCleanup]
public void TearDown()
{
scope.Dispose();
database.Dispose();
}
[TestMethod]
public void GetCategoryList_Success()
{
// create test data
var result = service.GetItems();
}
service.GetItems 方法如下所示:
try
{
using (DatabaseDataContext database = new DatabaseDataContext())
{
var items = (from i in database.Items
select i).ToList<Items>();
return items;
}
}
catch (Exception ex)
{
// log error
return null;
}
当 Linq 查询尝试执行时,抛出以下异常:
该操作对于事务的状态无效。
我相信这与嵌套事务有关,但我需要保持测试类中的事务处于打开状态,以便测试数据实际上不会保存到数据库中,并且一旦运行测试我就可以将其处理掉。
另外,我的主机位于共享实例上,因此我无法直接对服务器进行任何更改。
有没有办法让它按原样工作,或者在这种情况下是否有替代使用 TransactionScope 的方法?
【问题讨论】:
标签: c# asp.net unit-testing transactions datacontext