rya*_*ium 5 c# unit-testing mocking
我有一个使用 wsdl.exe 工具生成的 C# 类,如下所示:
public partial class SoapApi : System.Web.Services.Protocols.SoapHttpClientProtocol
{
public SOAPTypeEnum AskServerQuestion()
{
object[] results = return this.Invoke("AskServerQuestion");
return (SOAPTypeEnum) results[0];
}
}
Run Code Online (Sandbox Code Playgroud)
我有一些围绕此的瘦包装器代码,用于跟踪结果等。是否可以使用任何对象模拟框架来制作一个假的 SoapApi 类,并为每个对瘦包装器函数的调用返回可预测的结果?
我无法将 AskServerQuestion() 函数设为虚拟函数,因为它是由 wsdl.exe 工具自动生成的。
我实现此目的的方法是注入 ISoapApi,其中 ISoapApi 接口模仿自动生成的 SOAP API。
对于你的情况:
public interface ISoapApi
{
SOAPTypeEnum AskServerQuestion ();
}
Run Code Online (Sandbox Code Playgroud)
然后,利用生成的 SoapApi 类是部分的这一事实,并将其添加到另一个文件中:
public partial class SoapApi : ISoapApi
{
}
Run Code Online (Sandbox Code Playgroud)
然后,消费者应该采用可以被任何模拟框架模拟的 ISoapApi 依赖项。
当然,一个缺点是,当 SOAP API 更改时,您也需要更新接口定义。