我编写了一个代码来读取外部 Web 服务并使用System.Web.Services.ServiceDescription
. 我还可以调用该方法并通过 web 服务获取输出。这仅在外部 Web 服务 Url 的基础上完成。
一切都是从 CodeBehind (C#) 完成的。
我需要添加单元测试用例来测试功能,方法是添加将由单元测试访问的虚拟 .asmx webservice。
请让我知道或对我如何即时创建和使用虚拟服务提出建议。
我编写了一个代码来读取外部 Web 服务并使用System.Web.Services.ServiceDescription
. 我还可以调用该方法并通过 web 服务获取输出。这仅在外部 Web 服务 Url 的基础上完成。
一切都是从 CodeBehind (C#) 完成的。
我需要添加单元测试用例来测试功能,方法是添加将由单元测试访问的虚拟 .asmx webservice。
请让我知道或对我如何即时创建和使用虚拟服务提出建议。
据我所知,有两种不同的功能主义者:
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 的包装器,可以轻松进行模拟。
使用带有上述代码的任何模拟框架,您可以轻松地隔离和模拟任何部分,并且只测试手头的行为。这样,您甚至可以为 wsdl 提供者制作模拟,以返回您想要测试的任何 wsdl。
您可以走得更远并包装/隔离System.Web.Services.ServiceDescription
调用,因此您甚至不必在测试中通过 wsdl,只需处理结果即可。