我有一个业务规则visual studio类库(.NET 2.0)项目,它依赖于Dynamics Crm Web Services - 一个经典的SOAP Web引用而不是WCF端点。我想对这些业务规则进行单元测试,而不需要真正的crm实例。添加Web引用不会产生我可以假装的界面。它确实在我的项目中生成了c#,如果我可以创建接口,我认为我可以伪造它。我认为我不需要实际导航HTTP并进入所有协议的东西。
我看到了Joh Skeet的blog post。唉,我不想写任何代码,我希望从那以后可以帮助编写一个工具。我尝试了他的一些步骤但得出的结论是他比我聪明,我无法做到这一点。
我知道SoapUI,但是,我希望能在CI构建环境中运行的纯单元测试。
有没有办法做到这一点。
答案 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();
}
}
然后,在您调用生成的类的代码中,调用您的界面。在单元测试中,您可以使用模拟框架模拟接口,或者使用与生成的内容无依赖关系的另一个具体类来实现接口