2013-04-26 37 views
0

我想为某些开放源代码编写一些单元测试。dbcontext和重置内存中的元素

测试将测试只记录的最小数量已经被加载到内存 之一(即如果有人拨打:

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

测试应该失败)

对于这个在执行单元测试之前,应将DataContext.SomeTable.Load重置为0项。

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

回答

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 
     } 
    } 
} 
+0

当然 - 通过一个代表!感谢堆。 – Brent 2013-04-26 19:24:08

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

} 

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