使用内存提供程序模拟 EF 核心的 Dispose 方法的必要性
necessity of Dispose method mocking EF core with the in memory provider
背景
我正在开发一个 asp.net 核心应用程序,它使用 Entity Framework Core 作为 orm。对于单元测试,我正在使用 Microsoft 的内存提供程序(Microsoft.EntityFrameworkCore.InMemory
具体版本 1.1.0
)使用从我的 DBContext 派生的 class 手动模拟数据库。
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();
}
}
其中为每个上下文创建一个新的唯一内存数据库。
我目前正在重写 Dispose 以允许我检查目标方法写入的值,其中包含 using(DBContext...
,否则检查会抛出 ObjectDisposedException
当我 运行 我测试中的断言。我目前有另一种方法叫做 clear
,我可以手动调用它在 MockDBContext
.
中调用 base.Dispose
问题
我的问题是,由于模拟数据库在内存中,我真的需要处理它吗?或者如果我不费心在每个测试try finally
中调用clear
,它会被垃圾收集吗
只要您的内存数据库上下文没有像数据库连接或文件资源这样的依赖项,您就可以将处置留空。当没有对该对象的引用时,将自动收集所有超出范围的引用。
背景
我正在开发一个 asp.net 核心应用程序,它使用 Entity Framework Core 作为 orm。对于单元测试,我正在使用 Microsoft 的内存提供程序(Microsoft.EntityFrameworkCore.InMemory
具体版本 1.1.0
)使用从我的 DBContext 派生的 class 手动模拟数据库。
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();
}
}
其中为每个上下文创建一个新的唯一内存数据库。
我目前正在重写 Dispose 以允许我检查目标方法写入的值,其中包含 using(DBContext...
,否则检查会抛出 ObjectDisposedException
当我 运行 我测试中的断言。我目前有另一种方法叫做 clear
,我可以手动调用它在 MockDBContext
.
base.Dispose
问题
我的问题是,由于模拟数据库在内存中,我真的需要处理它吗?或者如果我不费心在每个测试try finally
中调用clear
,它会被垃圾收集吗
只要您的内存数据库上下文没有像数据库连接或文件资源这样的依赖项,您就可以将处置留空。当没有对该对象的引用时,将自动收集所有超出范围的引用。