2011-08-09 46 views
0

我正在研究TDD,並且遇到了可以使用一些幫助的場景。TDD在內部構造函數中注入Mocked Repository(UnitOfWork)

我的項目使用MVC3,並被構建爲具有BAL和DAL層。每個圖層都在其自己的項目中。 BAL通過Repository Pattern訪問數據庫。由於我使用的是EntityFramework,我還實現了UnitOfWork模式。以下是在BAL服務類的樣子:

public class ExampleService 
{ 
    private UnitOfWork unitOfWork; 
    private bool isProcessing = false; 

    internal ExampleService(UnitOfWork unitOfWork) 
    { 
     this.unitOfWork = unitOfWork; 
    } 
    public void ExposedMethod() 
    { 
     //do stuff with the unitOfWork 
    } 
} 

問:我想這個創建單元測試(顯然我應該寫代碼之前測試)。但是,如果我按原樣運行代碼,測試將是一次集成測試,因爲它將使用UnitOfWork並連接到我的數據庫。我可以模擬一個新的可以訪問內存中的虛擬數據的UnitOfWork,但我不知道如何注入它,因爲構造函數是內部的。我寧願不寫出駐留在每個項目中的單元測試。

有什麼想法?

回答

3

您可以使用[InternalsVisibleTo]屬性修飾包含此類的程序集,以使所有內部成員都可見於單元測試項目。

另一種可能性是公開此構造函數,因爲這會使該類更加可重用。通常,DI連線應該在體系結構(GUI)的最外層進行,並且這種不同依賴性的構造器需要公開。這允許此DAL層在其他項目中重用。

+0

[InternalsVisibleTo]將按原樣解決我的問題。我可能仍然缺少DI的一些東西,但是我展示的示例類是在BAL中,UnitOfWork在DAL中。我有內部標記的構造函數,因爲我有另一個類來控制對示例類的訪問。我將不得不考慮這一點。謝謝! – AFrieze