首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenRasta单元测试

OpenRasta单元测试
EN

Stack Overflow用户
提问于 2010-10-21 19:17:13
回答 2查看 528关注 0票数 4

我即将开始一个OpenRasta项目(一个基于http web服务的xml )。OpenRasta看起来很棒,但不幸的是,在互联网上工作的例子似乎很少。看看项目的测试端,如果我的处理程序返回的是强类型对象(不是OperationResult),即:

代码语言:javascript
复制
public class PersonHandler
...
 public Person Get(int id)
 {
 ...

如何测试http状态代码?(例如,如果处理程序抛出未捕获的异常)。我不确定测试处于什么级别,以及需要模拟什么(使用moq btw)

感谢任何帮助,特别是编码示例!

EN

回答 2

Stack Overflow用户

发布于 2010-10-27 00:19:42

我遇到了同样的问题,最终将我的测试作为更高层次的集成测试来编写,实际上是通过一个简单的HttpWebRequest客户端进行真正的REST/HTTP调用。这使我能够检查HTTP响应头/状态代码,并从客户机的角度仔细检查JSON/XML序列化,这与操作是否成功一样重要。

我首先从所有处理程序返回OperationResult,并使用它们包装强类型对象。我的处理程序都继承自一个基类,其中包含一些帮助器方法,这些方法可以更容易地返回带有用户友好的错误消息的自定义错误。我编写的代码越多,我的处理程序就越像一个ASP.NET MVC控制器。例如:

代码语言:javascript
复制
    public OperationResult GetById(int id)
    {
        try
        {
            // do stuff here
            return OKResult( // some strongly-typed resource );
        }
        catch(SomeException ex)
        {
            return BadRequestResult(SomeErrorCode, ex.Message);
        }
    }

然后,在测试客户端中,只需检查HTTP状态代码就很容易了。显然,这对mocking没有太大帮助。我不确定最好的解决方案是什么,事实上,我喜欢这个问题,希望有人能比我回答得更好--但到目前为止,这个方法对我来说效果很好。

票数 1
EN

Stack Overflow用户

发布于 2012-03-28 10:24:22

处理程序只是一个类--理想情况下依赖关系最小--因此您的单元测试可以只测试类中的隔离逻辑。

如果你想测试状态码,我推荐(基于很少的经验!)使用OpenRasta自托管。

这是我最近写的一个测试(有些改变):

代码语言:javascript
复制
    [TestMethod]
    public void POST_with_inaccurate_contentLength_returns_405()
    {
        var resource = GetResource();

        IRequest request = new InMemoryRequest
        {
            HttpMethod = "POST",
            Uri = new Uri("http://localhost/Resource"),
        };
        request.Headers.ContentLength = 16;  //wrong!

        request.Entity.Stream.Write(resource.Content, 0, resource.Content.Length);

        var response = _host.ProcessRequest(request);

        Assert.AreEqual(405, response.StatusCode);
    }

我应该补充说,主机是在TestInitialize方法中设置的:

代码语言:javascript
复制
        _host = new InMemoryHost(new Configuration());
        _host.Resolver.AddDependencyInstance(typeof(IFileResourceRepository), _repository, DependencyLifetime.Singleton);

在TestCleanup方法中清除...and。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3986837

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档