2011-08-11 124 views
3

我有一個業務規則Visual Studio類庫(.NET 2.0)項目,它依賴於Dynamics Crm Web服務 - 一個經典的SOAP Web引用而不是WCF端點。我想單元測試這些業務規則,而不需要在它背後有一個真正的crm實例。添加Web引用不會產生我可以僞造的接口。它確實在我的項目中生成了c#,我認爲如果我可以創建接口,我可以僞造它。我不認爲我需要實際導航HTTP並進入所有的協議內容。嘲笑客戶端層單元測試的Web服務

我看到了Joh Skeet的blog post。唉,我不想寫任何代碼,我希望從那時起寫一個工具可能會有幫助。我嘗試了一些步驟,但得出的結論是他比我聰明,我無法完成這項工作。

我知道SoapUI,但是,我希望能夠在CI構建環境中工作的純單元測試。

有沒有辦法做到這一點。

回答

3

模擬不帶接口的東西的標準方法是圍繞它構建自己的包裝。

要嘲笑代碼,說的web服務的東西:

class AutoGeneratedStuff 
{ 
    public string GeneratedMethodYouUse() 
    {...} 
    public string GeneratedMethodYouDontNeed() 
    {...} 
} 

你然後進行覆蓋代碼的唯一位你需要一個接口:

public interface IWebServiceClient 
{ 
    string MethodYouUse(); 
} 

和混凝土包裝實現它的類,它對生成的東西有依賴性

class WebServiceClient : IWebServiceClient 
{ 
    private AutoGeneratedStuff _stuff; 

    public WebService(AutogeneratedStuff stuff) 
    { 
     _stuff = stuff; 
    } 

    public string MethodYouUse() 
    { 
     return _stuff.MethodYouUse(); 
    } 
} 

然後,在yo你將調用生成的類的代碼,而不是調用你的接口。在你的單元測試中,你可以使用模擬框架來模擬接口,也可以通過實現與另一個具體類無關的接口來實現生成的東西

+0

很好的解釋,我不明白爲什麼它沒有之前被投票了。 – SwissCoder