Entity Framework FakeDbSet

為了單元測試,需要作假資料,如果用資料庫來做,就需要考慮測試資料的建立以及 Transaction 的問題,因為建立測試資料後還得刪除。

所以可以使用 Mock 的方式,把 IDbSet 改成使用 InMemory

目前 Nuget.org 就有一個套件,可以幫忙你實作 InMemorySet 我目前是安裝 AnotherFakeDbSet,Source 在 Github-AnotherFakeDbSet

這個 Source 的原始版本是 FakeDbSet 不過我也覺得 AnotherFakeDbSet 改的不錯,而且因為陸續有推出新版本,所以我自己也是採用這個 Nuget Package

設定 DbContext 的方式,是可以參考他 Source 裡面的 Examples 專案 (所以這邊就不把程式碼貼出來了,可以到 AnotherFakeDbSet 去下載)

在自己程式裡面,要使用 DbContext 的時候,就不能像是以下的程式一樣直接使用,因為這樣就無法測試了

1
using(var context = new BookStoreEntities()) {
2
  // Code....
3
}

我自己的方式,是採用類似 Provider 的概念來做。

這樣子,你如果測試的時候要抽換就會變得很容易 (當然,如果你要使用類似 IoC 的 framework 實作也 OK~)