2011-08-04 89 views
1

所以我想我可能不完全理解你將如何使用IOC容器做集成測試。覆蓋國際奧委會註冊使用集成測試

假設我有一對夫婦類:

public class EmailComposer : IComposer 
{ 
    public EmailComposer(IEmailFormatter formatter) 
    { 
     ... 
    } 
    ... 
    public string Write(string message) 
    { 
     ... 
     return _formatter.Format(message); 
    } 
} 

OK所以對於實際應用中的使用(我在這裏使用autofac)我想創建一個模塊,這樣做:

protected override void Load(ContainerBuilder containerBuilder) 
    { 
     containerBuilder.RegisterType<HtmlEmailFormatter>().As<IEmailFormatter>(); 
    } 

使完美的感覺和偉大的作品。

當談到單元測試時,我根本不會使用IOC容器,只是在我進行測試時模擬出格式化程序。再次效果很好。

好吧,現在談談我的集成測試...... 理想情況下,我會在集成測試期間運行整個堆棧,但讓我們假裝HtmlEmailFormatter是一些緩慢的外部WebService,因此我認爲這對我來說是最有利的改用Test Double。 但是......我不想在所有集成測試中使用測試雙重測試,只是一個子集(一組快速運行的煙霧測試樣式測試)。

在這一點上,我想注入一個模擬版本的web服務,以便我可以驗證正確的方法仍然被調用它。

所以,真正的問題是:

如果我有一個構造函數在多個參數的一類,如何讓我的參數之一解析爲對象的一個​​實例(即正確安裝模擬),但其餘的得到填充autofac?

+1

我會說集成測試與單元測試一樣:不要使用DI容器,手動實例化對象(也許在集成測試套件中放置工廠方法的幫助)。 – Steven

回答

1

我會說你使用SetUp和TearDown(NUnit)或ClassInitialize和ClassCleanup(MSTest)。在初始化你註冊你的臨時測試課程,並在清理你恢復到正常狀態。

使DI容器爲您指定所有的依賴關係有利於獲取整個依賴關係的對象圖解決方案。但是,如果您想要使用其他實現的單個測試,則可以使用Mocking框架。

相關問題