2016-03-09 620 views
0

假設我有以下代碼:自動化單元測試的DbContext和集成測試假貨

public Item CoolFunction(int i) { 
    var result = SomeContext.Item.First(t => t.Id == i); 
    return result; 
} 

假設不管是什麼原因,我想單元測試這種方法。在這種情況下,我可以使用MS Fakes來僞造上下文。但是,如果我想測試這個代碼對一個真正的Db,我必須寫另一個單元測試來這樣做。是否有一個(很好或方便或推薦)的方式來編寫一個單元測試,並且可以使用可以測試假上下文或實數據庫的開關?

+2

如果您使用依賴注入,您可以設置IoC容器來注入任何上下文實例。 –

+0

@GertArnold我不認爲這會是一件容易的事情,特別是僞造數據庫將需要大量的準備工作。你知道有誰在網上做過那些優雅的在線嗎? – Husain

+0

[我從來沒有看過嘲笑EF](http://stackoverflow.com/a/13352779/861716)。但是爲集成測試維護一個數據庫也需要謹慎的準備(儘管我認爲它比編寫一個模擬「宇宙」更容易)。如果你不使用它,介紹IoC是一件非常重要的工作。儘管如此,這可能是值得的。 –

回答

1

我絕對推薦檢查出勁道: https://effort.codeplex.com/

這是一個「實體框架單元測試工具」,設置了一個內存數據庫。數據庫可以是「臨時」(爲每個測試重新創建)或「持久」(所有單元測試都維護同一個數據庫)。

單元和集成測試的兩個世界中最好的。我發現它比嘲笑IDbSet更簡單。

+0

這是一個很棒的工具。唯一的問題是,我不能依靠那些「糟糕」的代碼來編寫將會持續數年的代碼。但是,感謝你的重要提示。這可能是我的問題的完美解決方案。 – Husain