Dbcontext和重置内存中的元素
本文关键字:元素 内存 Dbcontext | 更新日期: 2023-09-27 18:11:04
我正在尝试为一些开源代码编写一些单元测试。
其中一个测试将测试只有最少数量的记录被加载到内存中(例如,如果有人打电话来:
DataContext.SomeTable.ToList().Where(s=>s.Id <=10)
测试应该失败)
为了使这个工作,在执行单元测试之前,DataContext.SomeTable.Load应该重置为0项。
目前,这个TestFixture(使用了nunit,但不应该是相关的)是抽象的,在实例化时注入了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();
}
}
每个测试应该只访问表一次。单元测试的要点是每个测试都是针对单个场景的。