美文网首页
moco代码赏析十二

moco代码赏析十二

作者: hopelty | 来源:发表于2018-02-11 18:18 被阅读0次

今天要看的是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。

相关文章

  • moco代码赏析十二

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

  • moco代码赏析十一

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

  • 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代码赏析八

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

  • moco代码赏析二

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

网友评论

      本文标题:moco代码赏析十二

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