我将要开始一个OpenRasta项目(http Web服务上的xml)。 OpenRasta看起来很棒,但不幸的是,在互联网上几乎没有可行的例子。从项目的测试方面来看,如果我的处理程序正在返回强类型对象(不是OperationResult),即:
public class PersonHandler
...
public Person Get(int id)
{
...
如何测试http状态代码? (例如,如果处理程序引发未捕获的异常)。我不确定测试的级别,需要模拟什么(使用moq btw)
任何帮助表示赞赏,特别是编码示例!
最佳答案
我遇到了同样的问题,最终将我的测试写为更高级别的集成测试,实际上是通过一个简单的HttpWebRequest客户端进行真正的REST / HTTP调用。这使我可以检查HTTP响应标头/状态代码,并从客户端的角度再次检查JSON / XML序列化,这与操作是否成功同样重要。
我首先从所有处理程序返回OperationResult,然后使用它们包装强类型的对象。我的所有处理程序都从具有一些帮助程序方法的基类继承,这些方法使返回带有用户友好错误消息的自定义错误更加容易。我编写的代码越多,我的处理程序就越类似于ASP.NET MVC控制器。例如。:
public OperationResult GetById(int id)
{
try
{
// do stuff here
return OKResult( // some strongly-typed resource );
}
catch(SomeException ex)
{
return BadRequestResult(SomeErrorCode, ex.Message);
}
}
然后在测试客户端中,只需检查HTTP状态代码就非常容易。显然,这对模拟没有太大帮助。我不确定最好的解决方案是什么,实际上我很喜欢这个问题,希望有人能比我更好地回答-到目前为止,这对我来说效果很好。