通过隔离它所依赖的 Web 服务来对 c# .Net Web 服务进行单元测试

Unit Testing a c# .Net web service by isolating the web services it depends on

我必须对依赖于其他几个 Web 服务的 C# 项目进行单元测试。在进行单元测试时,我不想调用服务,而只是 return 一个虚拟值。我目前正在尝试使用垫片,但遇到了问题。当前代码为外部网络服务创建一个客户端,然后调用一个方法

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

CSSFormTransformationClient 的定义由 SvcUtil.exe 工具生成,并具有如下方法 TransformToPDF

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

现在我假设我可以通过以下方式使用 shim 来模拟 transformToPDF

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

但它不允许我。有人告诉我如何模拟 transformToPDF 方法?

谢谢。

P.S - 这个项目使用 WCF。

根据我的评论:尝试使用最小起订量 (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.
}