2012-10-24 49 views
1

我試圖測試使用的DbContext測試存儲庫的DbContext - 關於IDbSet

的倉庫嘲諷的問題,我遇到的問題是,的DbContext想回到DbSet對於某些類型的

我不能甚至模擬IDbSet,因爲它有一個PRIVATE CTOR?!?!?!

大家都過得如何?

回答

0

您需要使用適配器或包裝。 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(); 
    } 
}