【发布时间】:2013-01-11 12:26:47
【问题描述】:
我正在开发一个使用 CookComputing XML-RPC.net 的应用程序
我的问题是如何对调用外部 rpc 方法的方法进行单元测试。
如果我们以网站上的例子为例:
//This is the XML rpc Proxy interface
[XmlRpcUrl("http://www.cookcomputing.com/xmlrpcsamples/RPC2.ashx")]
public interface IStateName : IXmlRpcProxy
{
[XmlRpcMethod("examples.getStateName")]
string GetStateName(int stateNumber);
}
public class MyStateNameService
{
public string GetStateName(int stateNumber)
{
IStateName proxy = XmlRpcProxyGen.Create<IStateName>();
return proxy.GetStateName(stateNumber);
}
}
我们如何在不实际命中的情况下有效地测试 IStateName 的结果 http://www.cookcomputing.com/xmlrpcsamples/RPC2.ashx
我想一个好的开始是MyStateNameService 上的构造函数采用 IStateName,并在 IStateName 上传入一个假的(或模拟的?)实例...
我有兴趣测试它的实际内容——例如伪造来自端点的响应,并以某种方式返回它,而不仅仅是验证 GetStateName 调用服务...
编辑
我并没有试图测试服务的内容本身,以及 my 类对它的作用。
例如,假设响应是:
<?xml version="1.0"?>
<methodResponse>
<params>
<param>
<value><string>My State Name</string></value>
</param>
</params>
</methodResponse>
我想“伪造”该响应,以了解如何测试 MyStateNameService.GetStateName 实际返回的“我的州名”
【问题讨论】:
-
为什么要测试内容?当然,一旦它到达
IStateName代理,它就不再是您的应用程序所关心的问题了。不要测试外部代码,这取决于编写库的人! -
对不起...我将编辑问题以使其更清楚。请查看已编辑的问题
-
我仍然不确定这一点。如果我错了,请纠正我,但是您不直接处理 XML,而是调用代理上的一个方法,该方法创建一个请求,并将其发送到为 RPC 提供服务的任何事物。响应返回到代理,然后解析输出并将其提供给您?在这种情况下,您无法控制 XML 解析,由库的代理类完成,那么您为什么要测试它呢?
-
还有更多,如果您无权访问库的内部,我不确定您是否可以测试它...
-
目前,我连接到实时服务器来测试我的服务。这似乎有点矫枉过正。本质上,服务器所做的只是返回一大块 XML。 XML RPC 库正在解析它。到目前为止一切顺利,但我想测试我的类/结构是否与返回的 xml 等匹配......
标签: c# unit-testing mocking nunit xml-rpc