Dbcontext和重置内存中的元素

本文关键字:元素 内存 Dbcontext | 更新日期: 2023-09-27 18:11:04

我正在尝试为一些开源代码编写一些单元测试。

其中一个测试将测试只有最少数量的记录被加载到内存中(例如,如果有人打电话来:

 DataContext.SomeTable.ToList().Where(s=>s.Id <=10)

测试应该失败)

为了使这个工作,在执行单元测试之前,DataContext.SomeTable.Load应该重置为0项。

目前,这个TestFixture(使用了nunit,但不应该是相关的)是抽象的,在实例化时注入了DbContext,以便单元测试可以测试不同的提供者。我不相信有一种方法来清除加载的实体,但我想知道我如何处置和创建一个新的DbContext,它使用与注入的上下文相同的数据库提供程序。

Dbcontext和重置内存中的元素

首先,您可以发布您的代码吗?

第二,如果我理解正确的话,您想每次都重新创建上下文?一种解决方案是传入一个函数来创建上下文,而不是上下文本身。这样的:

public class MyTest {
    private Func<IMyContext> createContext;
    public MyTest(Func<IMyContext> createContext){
       this.createContext = createContext;
    }
    [Test]
    public void RunTest(){
        using(var context = this.createContext()){
             // do stuff with context
        }
    }
}
public class TestClass
{
    private MyContext context;
    [SetUp]
    public void Setup()
    {
        // is executed before each test
        context = new MyContext();
    }
    [Test]
    public void Test1()
        context.SomeTable.ToList().Where(s => s.Id <= 10);
    }
    [TearDown]
    public void Complete()
    {
        context.Dispose();
    }
}

每个测试应该只访问表一次。单元测试的要点是每个测试都是针对单个场景的。