• 2013-11-02

    Moco 0.9发布

    Tag:moco

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://www.blogbus.com/dreamhead-logs/236571479.html

    前版信息:Moco 0.8.1发布

    我很高兴地宣布,Moco 0.9发布了。

    Moco是什么?

    Moco是一个可以轻松搭建测试服务器的框架/工具/程序库。

    变更

    本次发布包含两个重大的新特性,事件和验证。

    事件指的是,在某种情况下,触发相应的处理。目前支持的事件是“完成”事件,也就是说,当一个请求处理完成时,我们可以做相应的处理。

    比如,我们可以用如下代码在请求处理之后,发出另外一个请求。

    server.request(by(uri("/event"))).response("event").on(complete(get("http://another_site")));

    我们还可以声明这个请求是异步的,这样不会阻塞本次调用给客户端回应答。

    server.request(by(uri("/event"))).response("event").on(complete(async(post("http://another_site", "content"), latency(1000))));

    这种情况可以用于诸如OAuth认证之类的情形,在服务器接到一个请求之后,发起另外一个请求。

    它也支持相应的JSON配置:

    {
    "request": {
       "uri" : "/event"
    },

    "response": {
       "text": "event"
    },
    "on": {
       "complete": {
           "async" : "true",
           "latency" : 1000,
           "post" : {
               "url" : "http://another_site",
               "content": "content"
           }
       }
    }
    }

    验证,是一个用于测试代码中的特性,类似于Mock框架中的verify功能,对请求进行验证。下面是一个例子。

    RequestHit hit = requestHit();
    final HttpServer server = httpserver(12306, hit);
    server.get(by(uri("/foo"))).response("bar");

    running(server, new Runnable() {
     @Override
     public void run() throws Exception {
       assertThat(helper.get(remoteUrl("/foo")), is("bar"));
     }
    });

    hit.verify(by(uri("/foo")), times(1));

    这里的verify的第一个参数是一个matcher,也就是说,我们可以写任意的条件组合,甚至与设置服务器的完全不同。

    此外,我们还支持未预期请求的验证,如下:

    hit.verify(unexpected(), never());

    目前支持的验证条件包括:

    • never: 没有收到这样的请求。
    • time: 准确匹配收到这些次数的请求。
    • atLeast:至少收到这些次数的请求。
    • atMost:至多收到这些次数的请求。

    此外,还有一些小特性的变更:

    • 缺省情况下,关闭了使用API方式的日志。
    • seq API支持了ResponseHandler接口。
    • 为PUT和DELETE方法增加了快捷方式。

    在内部实现细节上也有一些微调:

    • 如果不提供端口,服务器会自行选择可用端口。
    • 在Failover的实现里,“statusCode”改成了“status”。如果因此造成了测试失败,可以手工修改Failover文件。

    感谢

    感谢Paul Hammant,为Moco提供了大量的反馈,并激发了验证特性实现的灵感。

    分享到:

    历史上的今天:

    引用地址: