美文网首页
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代码赏析八

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