今天要看的是2012.11.8的唯一一次提交毒涧,這次提交還是做了很多工作的贮预。
首先,對(duì)測(cè)試類MocoTest做了重構(gòu)契讲,把類中的三個(gè)之前重構(gòu)出來(lái)的輔助方法提取到了一個(gè)新的類仿吞,MocoTestHelper。
其次捡偏,新加入了一個(gè)stand-alone Server唤冈。這是另一種實(shí)現(xiàn)servlet的方式,當(dāng)多輸入輸出時(shí)银伟,我們可以把它們放到同一個(gè)json文件中你虹,進(jìn)行解析。
{
"port" : 8080,
"sessions" :
[
{
"response" :
{
"text" : "foo"
}
},
{
"request" :
{
"uri" : "/foo"
},
"response" :
{
"text" : "bar"
}
}
]
}
當(dāng)有一個(gè)這樣的json文件作為輸入輸出標(biāo)準(zhǔn)時(shí)彤避,代碼是這樣處理的:
首先new一個(gè)JsonRunner傅物,調(diào)用run()方法,然后run()方法會(huì)new一個(gè)HttpServerParser對(duì)象忠藤,調(diào)用其parseServer()方法挟伙,返回一個(gè)HttpServer對(duì)象,這個(gè)對(duì)象會(huì)像之前的實(shí)現(xiàn)方式一樣,調(diào)用HttpServer的request和response方法尖阔,最終server對(duì)象會(huì)調(diào)用他自己的run()方法贮缅,new一個(gè)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;
}
}
其實(shí)這次的添加功能并沒(méi)有改變?cè)鹊膶?shí)現(xiàn)方式,而是在原先的實(shí)現(xiàn)方式上再包裝一層齿坷,當(dāng)使用者以這種方式來(lái)使用moco時(shí)桂肌,需要做的就只有傳入一個(gè)json文件,這個(gè)json文件必須按照規(guī)定的json格式來(lái)構(gòu)建永淌,才能被程序解析成JsonSetting對(duì)象崎场。就目前來(lái)看,moco的入口是不統(tǒng)一的遂蛀,因?yàn)橹暗膶?shí)現(xiàn)是需要自己來(lái)new一個(gè)HttpServer谭跨,然后代碼調(diào)用request和response方法,而這次的提交李滴,支持json格式的文件螃宙,使用者需要做的就是編輯一個(gè)json文件,傳入即可所坯,不需要寫(xiě)任何的業(yè)務(wù)代碼谆扎。所以目前為止,我認(rèn)為還需要再修改程序的入口芹助,這樣讓使用者才會(huì)更明白堂湖、更清楚的使用moco。