所以我想我可能不完全理解你將如何使用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?
我會說集成測試與單元測試一樣:不要使用DI容器,手動實例化對象(也許在集成測試套件中放置工廠方法的幫助)。 – Steven