使用内存提供程序模拟 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,它会被垃圾收集吗

只要您的内存数据库上下文没有像数据库连接或文件资源这样的依赖项,您就可以将处置留空。当没有对该对象的引用时,将自动收集所有超出范围的引用。