必要性Dispose方法的嘲笑EF核心与内存供应商
问题描述:
我正在使用实体框架的核心,因为它的ORM一个asp.net核心应用。对于单元测试,我使用Microsoft内存提供程序(Microsoft.EntityFrameworkCore.InMemory
特别是版本1.1.0
)手动模拟数据库与从我的DBContext派生的类。
MockDBContext.cs:
public class MockDBContext:DBContext{
public MockDBContext:base(
new DbContextOptionsBuilder<DBContext>().UseInMemoryDatabase(
Guid.NewGuid().ToString()
).Options
){}
public override void Dispose(){}
public void clear(){
base.Dispose();
}
}
在内存数据库中的新的独特之处在于为每个上下文创建。
我现在正在重写处置不做任何事情来允许我检查目标方法编写的值,其中有using(DBContext...
,否则当我在测试中运行断言时,检查会抛出ObjectDisposedException
。我目前有另一种方法称为clear
,我可以手动拨打电话base.Dispose
MockDBContext
。
问题
我的问题是,由于模拟数据库是在内存中,我是不是真的需要处理呢?还是会得到垃圾回收,如果我不叫clear
一个try finally
内为每个测试打扰
答
只要你的内存数据库上下文中没有依赖关系一样,应该在处置被释放,可以在数据库连接或文件资源处置空置。当没有对象的引用时,超出范围的所有引用将自动收集。