美文网首页
moco代码赏析八

moco代码赏析八

作者: hopelty | 来源:发表于2018-02-05 17:32 被阅读0次

今天来看一下2012.11.7的前四次提交,在下一篇中再聊那天的后五次提交。


首先来看第一次提交,这一次提交主要完成了MocoHttpServer类中的get()方法,这个方法的作用是指定了请求的方法只可以是get(),否则不能正确返回值。并且新写了一个类,HttpMethodRequestMethod类,它实现了RequestMatcher接口。

    server.get(by(uri("/foo"))).response(text("bar"));
    public Setting get(RequestMatcher matcher) {
        return request(and(new HttpMethodRequestMethod(), matcher));
    }
    public class HttpMethodRequestMethod implements RequestMatcher {
        @Override
        public boolean match(HttpRequest request) {
            return HttpMethod.GET.equals(request.getMethod());
        }
    }

上面的代码已经展示了作者是如何实现这个功能的,由MocoHttpServer的server对象来调用,把get()方法转换成一个matcher,和传入的matcher参数是and的关系。需要match的是,首先是否使用的是get()方式来请求。第二,是否能够match得上传入的matcher参数。

作者在第三次提交中,以相同的方式,实现了post()方式来请求,代码如出一辙,不必赘述。

第二次提交是对测试类做了一次重构。

第四次提交新加了一个Header类,顾名思义就是可以在post请求时加入header。与之对应的,就需要加入一个HeaderRequestMatcher类,重写match()方法。

    server.request(eq(header("foo"), "bar")).response("blah");
    public static Header header(String header) {
        return new Header(header);
    }
    public static RequestMatcher eq(Header xpath, String expected) {
        return new HeaderRequestMatcher(xpath, expected);
    }
    public class Header {
        private String header;
    
        public Header(String header) {
            this.header = header;
        }
    
        public String getHeader() {
            return header;
        }
    }
    public class HeaderRequestMatcher implements RequestMatcher {
        private final Header header;
        private final String expected;
    
        public HeaderRequestMatcher(Header header, String expected) {
            this.header = header;
            this.expected = expected;
        }
    
        @Override
        public boolean match(HttpRequest request) {
            return expected.equals(request.getHeader(header.getHeader()));
        }
    }

我们可以看到当请求时传入的header的Key-Value pair和我们第一部分代码传入的相同时,match()方法才能返回true。

相关文章

  • moco代码赏析八

    今天来看一下2012.11.7的前四次提交,在下一篇中再聊那天的后五次提交。 首先来看第一次提交,这一次提交主要完...

  • moco代码赏析十一

    今天来看一下2012.11.7的后三次提交,这三次提交做的事情是比较统一的:用RequestExtractor、C...

  • moco代码赏析十二

    今天要看的是2012.11.8的唯一一次提交,这次提交还是做了很多工作的。 首先,对测试类MocoTest做了重构...

  • moco代码赏析五

    今天来看一下2012.10.30的后三次提交。 提交一:支持了请求时传入一个流 通过stream()方法把流包装成...

  • moco代码赏析六

    今天看的是2012.11.02那天的三次提交,第一次提交加了一些TODO事项,记下了作者接下来要做什么。第二次提交...

  • moco代码赏析四

    对于作者的第四次提交,我们直接从代码的单元测试类入手,来看看做了哪些改动。 以前的调用方式: 现在的调用方式: 我...

  • moco代码赏析十

    接下来看一看2012.11.7的后五次提交。第一次提交,新引入了一个类HttpServer,由MocoHttpSe...

  • moco代码赏析七

    今天看的是2012.11.6的三次提交。 第一次提交作者更改了包名(package name),第三次提交作者更改...

  • moco代码赏析九

    今天来谈一下目前的代码中是如何使用组合模式的。以下是matcher部分的类图和组合模式的类图: Component...

  • moco代码赏析二

    今天来看一下作者的第二次提交。首先看下有哪些改变: src包中改动了四个类,新加了一个接口RequestHandl...

网友评论

      本文标题:moco代码赏析八

      本文链接:https://www.haomeiwen.com/subject/ntzbzxtx.html