模拟Web服务以进行客户端层单元测试

时间:2011-08-11 17:56:41

标签: web-services unit-testing

我有一个业务规则visual studio类库(.NET 2.0)项目,它依赖于Dynamics Crm Web Services - 一个经典的SOAP Web引用而不是WCF端点。我想对这些业务规则进行单元测试,而不需要真正的crm实例。添加Web引用不会产生我可以假装的界面。它确实在我的项目中生成了c#,如果我可以创建接口,我认为我可以伪造它。我认为我不需要实际导航HTTP并进入所有协议的东西。

我看到了Joh Skeet的blog post。唉,我不想写任何代码,我希望从那以后可以帮助编写一个工具。我尝试了他的一些步骤但得出的结论是他比我聪明,我无法做到这一点。

我知道SoapUI,但是,我希望能在CI构建环境中运行的纯单元测试。

有没有办法做到这一点。

1 个答案:

答案 0 :(得分:3)

模拟没有接口的东西的标准方法是围绕它构建自己的包装器。

你要模拟的代码,比如webservice的东西:

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();
    }
}

然后,在您调用生成的类的代码中,调用您的界面。在单元测试中,您可以使用模拟框架模拟接口,或者使用与生成的内容无依赖关系的另一个具体类来实现接口