1
我試圖測試使用的DbContext測試存儲庫的DbContext - 關於IDbSet
的倉庫嘲諷的問題,我遇到的問題是,的DbContext想回到DbSet對於某些類型的
我不能甚至模擬IDbSet,因爲它有一個PRIVATE CTOR?!?!?!
大家都過得如何?
我試圖測試使用的DbContext測試存儲庫的DbContext - 關於IDbSet
的倉庫嘲諷的問題,我遇到的問題是,的DbContext想回到DbSet對於某些類型的
我不能甚至模擬IDbSet,因爲它有一個PRIVATE CTOR?!?!?!
大家都過得如何?
您需要使用適配器或包裝。 DbContext是第三方代碼。你的代碼應該隱藏在抽象背後,記住這只是關於你的系統內部工作原理的實現細節。你應該隨時可以隨時更改。
public class ThatsHardToTest
{
// Private constructors, slow start up time etc...
public int AlwaysReturnOneExceptInSuperRareScnearios()
{
// Complex logic.
return 1;
}
}
現在,如果我們想在上述方法出錯時測試我們的代碼,例如數據庫系統處於脫機狀態。我不希望測試打到數據庫,所以我們需要一個圍繞這個第三方代碼的適配器。我會做一個接口或基類。
public class MyTestAdapter : IExampleAdapter
{
public int ReturnWhateverIWant()
{
return -1;
}
}
我會用MyTestAdapter
來測試我的代碼,因爲我可以控制它的功能。對於生產代碼,只需將其替換爲代表實際生產系統的適配器即可。例如:
public class MyRealAdapter : IExampleAdapter
{
public int ReturnWhateverIWant()
{
return new ThatsHardToTest().AlwaysReturnOneExceptInSuperRareScnearios();
}
}