2013-04-26 68 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(); 
    } 

} 

每個測試只能訪問一次表。 單元測試的一點是每個測試都是針對單一場景的。