2016-11-21 79 views
0

我必須單元測試C#項目,它依賴於其他幾個Web服務。雖然單元測試我不想調用服務,但只是返回一個虛擬值。我正在嘗試使用墊片,但我面臨的問題。當前代碼創建針對外部web服務的客戶端,然後調用一個方法單元測試一個c#.Net網絡服務通過隔離它依賴的網絡服務

CSSFormTransformationClient client = new CSSFormTransformationClient(); 
MemoryStream stream = client.TransformToPDF(cssRequest); 

由svcutil.exe的工具生成的CSSFormTransformationClient的定義和有一個方法TransformToPDF如下

public System.IO.MemoryStream TransformToPDF(Mycompany.Enterprise.Reporting.ServiceReferences.CssTransformation.TransformRequest transformRequest) 
{ 
    return base.Channel.TransformToPDF(transformRequest); 
} 

現在我假設我可以用以下方式使用勻場來模擬transformToPDF的返回值

ServiceReferences.CssTransformation.Fakes.ShimCSSFormTransformationClient.AllInstances.TransformToPDF =() => { } 

但是它不允許我。有人告訴我如何模擬transformToPDF方法?

感謝。

P.S - 該項目使用WCF。

+0

我已經添加了假裝配和一切..只是錯過了正確的方式去做這個.. –

+0

你可以定義「不讓我」?你是否收到錯誤或其他消息?究竟是什麼問題?另外,你有沒有嘗試Moq? – Brandon

+0

@Brandon _ServiceReferences.CssTransformation.Fakes.ShimCSSFormTransformationClient.AllInstances_ 之後它只給了我兩個選項「等於」和「引用等於」。如果我做了其他事情,VS強調它是紅色的。我沒有嘗試過模擬。鑑於moq在這種服務隔離中的一般描述和一般適合性,是否會暗示墊片? –

回答

0

按照我的評論:用Moq試試(Available on NuGet)。

using Moq; 
using TransformRequest = Mycompany.Enterprise.Reporting.ServiceReferences.CssTransformation.TransformRequest; 

private MemoryStream _toReturn; 

public void SetupTest() 
{ 
    this._toReturn = new MemoryStream();  
} 
public void TearDownTest() 
{ 
    if (this._toReturn != null) 
    { 
     this._toReturn.Dispose(); 
    } 
} 

public void YourTestMethod() 
{ 
    var client = new Mock<CSSFormTransformationClient>(); 

    client.Setup(c => c.TransformToPDF(It.IsAny<TransformRequest>()) 
      .Returns(this._toReturn); 

    MemoryStream stream = client.TransformToPDF(cssRequest); //Get cssRequest beforehand... I don't know where it came from. 

    //Continue with your test. 
} 
+0

好!謝謝!我會試一試。 :) –