今天要看的是2012.11.8的唯一一次提交,这次提交还是做了很多工作的。
首先,对测试类MocoTest做了重构,把类中的三个之前重构出来的辅助方法提取到了一个新的类,MocoTestHelper。
其次,新加入了一个stand-alone Server。这是另一种实现servlet的方式,当多输入输出时,我们可以把它们放到同一个json文件中,进行解析。
{
"port" : 8080,
"sessions" :
[
{
"response" :
{
"text" : "foo"
}
},
{
"request" :
{
"uri" : "/foo"
},
"response" :
{
"text" : "bar"
}
}
]
}
当有一个这样的json文件作为输入输出标准时,代码是这样处理的:
首先new一个JsonRunner,调用run()方法,然后run()方法会new一个HttpServerParser对象,调用其parseServer()方法,返回一个HttpServer对象,这个对象会像之前的实现方式一样,调用HttpServer的request和response方法,最终server对象会调用他自己的run()方法,new一个MocoHttpServer,再start server,stop server。
public class HttpServerParser {
public HttpServer parseServer(InputStream is) throws IOException {
ObjectMapper mapper = new ObjectMapper();
JsonSetting jsonSetting = mapper.readValue(is, JsonSetting.class);
return createHttpServer(jsonSetting);
}
private HttpServer createHttpServer(JsonSetting jsonSetting) {
HttpServer server = new HttpServer(jsonSetting.getPort());
List<SessionSetting> sessions = jsonSetting.getSessions();
for (SessionSetting session : sessions) {
if (session.isAnyResponse()) {
server.response(session.getResponse().getText());
} else {
server.request(by(uri(session.getRequest().getUri()))).response(session.getResponse().getText());
}
}
return server;
}
}
其实这次的添加功能并没有改变原先的实现方式,而是在原先的实现方式上再包装一层,当使用者以这种方式来使用moco时,需要做的就只有传入一个json文件,这个json文件必须按照规定的json格式来构建,才能被程序解析成JsonSetting对象。就目前来看,moco的入口是不统一的,因为之前的实现是需要自己来new一个HttpServer,然后代码调用request和response方法,而这次的提交,支持json格式的文件,使用者需要做的就是编辑一个json文件,传入即可,不需要写任何的业务代码。所以目前为止,我认为还需要再修改程序的入口,这样让使用者才会更明白、更清楚的使用moco。