今天来看一下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。
网友评论