我正在尝试为一些开源代码编写一些单元测试。
其中一个测试将测试只有最小数量的记录已加载到内存中 (即如果有人打电话:
DataContext.SomeTable.ToList().Where(s=>s.Id <=10)
测试应该失败)
为此,DataContext.SomeTable.Load应在单元测试执行前重置为0项。
目前,这个TestFixture(使用nunit,但不应该是相关的)是抽象的,在实例化时注入DbContext,以便单元测试可以测试不同的提供者。 我不相信有一种方法可以清除加载的实体,但是想知道如何处理和创建一个新的DbContext,它使用与注入的上下文相同的数据库提供程序。
答案 0 :(得分:1)
首先,您可以发布您的代码吗?
其次,如果我理解正确,您希望每次都重新创建上下文?一种解决方案是传入函数来创建上下文而不是上下文本身。像这样:
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
}
}
}
答案 1 :(得分:0)
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();
}
}
每个测试只能访问一次表。 单元测试的一点是每个测试都针对单一场景。