dbcontext和重置内存中的元素

时间:2013-04-26 09:15:59

标签: c# entity-framework dbcontext

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

其中一个测试将测试只有最小数量的记录已加载到内存中 (即如果有人打电话:

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

测试应该失败)

为此,DataContext.SomeTable.Load应在单元测试执行前重置为0项。

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

2 个答案:

答案 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();
    }

}

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