添加单元测试用例以测试外部webservice(.asmx).NET

本文关键字:asmx NET webservice 外部 单元 测试用例 测试 添加 | 更新日期: 2023-09-27 18:29:55

我编写了一段代码来读取外部web服务,并使用System.Web.Services.ServiceDescription查找公开方法及其参数。我还能够调用该方法并通过webservice获得输出。这只能在外部Web服务Url的基础上完成。

一切都是从CodeBehind(C#)完成的。

我需要添加单元测试用例,通过添加单元测试将访问的dumm.asmx Web服务来测试功能。

请让我知道或有建议,我如何才能创建一个虚拟服务的飞行和使用。

添加单元测试用例以测试外部webservice(.asmx).NET

据我所见,有两种不同的功能主义者:

WSDL提供者,即从某处获取有效WSDL的类WSDL解析器-解析WSDL并提取数据的类

下面是这些代码的伪代码实现,使它们易于模拟和单元测试。

public interface IWSDLProvider
{
   string GetWsdlFromService(string url);
}
public class MyWsdlProvider : IWSDLProvider
{
   private readonly IWebWrapper _webCLient;
   public MyWsdlProvider(IwebWrapper webClient)
   {
       _webClient = webCLient;
   }
   public string GetWsdlFromService(string url)
   {
      //do here whatever is needed with the webClient to get the wsdl
   }
}
public interface IWSDLParser
{
   MyServiceData GetServiceDataFromUrl(string url);
}
public class MyWsdlParser : IWSDLParser
{
   private readonly IWSDLProvider _wsdlProvider;
   public MyWsdlParser(IWSDLProvider wsdlProvider)
   {
      _wsdlProvider = wsdlProvider;
   }
   public MyServiceData GetServiceDataFromUrl(string url)
   {
      //use the wsdl provder to fetch the wsdl
      //and then parse it
   }
}

IWebClient是一个围绕WebClient的包装器,可以方便地进行嘲讽。

使用任何带有上述代码的mocking框架,您都可以轻松地隔离和模拟任何部分,并且只测试手头的行为。这样,您甚至可以为wsdl提供程序制作mock,以返回您想要测试的任何wsdl。

您可以更进一步,包装/隔离System.Web.Services.ServiceDescription调用,这样您就不必在测试中传递wsdl,只需处理结果即可。