我正在开发一个基于 Asp.Net Boilerplate 构建的项目,现在我必须使用具有真实数据库连接(无模拟)的真实存储库对服务进行单元测试。我一直在使用https://gist.github.com/hikalkan/1e5d0f0142484da994e0中的 BringerOd 的最后一篇文章作为设置我的 UnitOfWorkScope 实例的指南。所以,我的代码目前看起来像这样:
IDisposableDependencyObjectWrapper<IUnitOfWork> _unitOfWork;
[TestInitialize]
public void SetUpService()
{
//initialize service
_unitOfWork = IocManager.Instance.ResolveAsDisposable<IUnitOfWork>();
UnitOfWorkScope.Current = _unitOfWork.Object;
UnitOfWorkScope.Current.Initialize(true);
UnitOfWorkScope.Current.Begin();
}
[TestCleanup]
public void CleanUpService()
{
UnitOfWorkScope.Current.Cancel();
_unitOfWork.Dispose();
UnitOfWorkScope.Current = null;
}
这就像第一个单元测试的魅力,但是当我尝试在第二个测试中进行存储库调用时,我得到:“操作无法完成,因为 DbContext 已被释放。”
我的猜测是,当 TestInitialize 方法再次运行时,工作单元范围被分配了相同的(已处理的)DbContext,而不是一个新的。我想,在我的实际测试方法中,我可以在带有 IUnitOfWork 的 using 块中设置我的 UnitOfWorkScope。但是,我真的不想在每个测试中重复这个逻辑。有谁知道如何手动获得 using 块的效果,以便我每次都获得一个全新的 DbContext ?