服务模拟-ServiceMock

在软件开发过程中,经常会有如下情况发生:

  1. 界面开发人员要开发界面,但是要使用的服务还没有开发好,这个时候,要么只能开发一半,要么就只能等服务开发好之后再继续进行开发,无论是哪一种情况,都会导致影响开发进度。
  2. 与第三方对接的时候,由于各种原因,无法在本地构建第三方测试环境,只能到客户现场进行开发和测试,这会导致出差成本增加,开发人员满意度下降等情况的发生。
  3. 做一个Demo系统,如果是全部做静态页面,与客户沟通讲解的时候,总是讲起来不够真实,如果全部采用真实实现,会导致Demo系统构建成本太高。

Tiny框架为了避免上述问题,增加了ServiceMock工程,顾名思义就是Mock一个服务,它的访问接口和真实的完全一致,但是内部的实现却是虚假的,这样就可以比较好的解决上面的问题:

  1. 对于并行开发来说,只要先花一点时间简单做个MockService,界面开发人员就可以完全按照真实的方式进行开发、测试了,绝大多数的情况都可以满足展现和控制层的开发要求。
  2. 对于与第三方对接的情况,只要先做好与对应的第三方所有接口的MockService,就可以完全在本地进行开发与测试,最后只要到现场做集成测试即可。
  3. 做出来的系统完全可以做得更真实,比如:做个HelloWorld服务,比如在输入框中输入的是”abc“,展现出的效果是”Hello,abc“的效果比”Hello,World“的效果好得多,同时又不用花太多的工作量。

下面就用一个具体的例子来进行说明:

编写下面的Xml文件:

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

<mock-service>

   <mock-service-info service-id="helloworld" >

      <parameters>

        <parameter name="name" type="java.lang.String" required="true" is-array="false"></parameter>

      </parameters>

      <results>

         <parameter name="result" required="false" is-array="false" type="java.lang.String"></parameter>

      </results>

   </mock-service-info>

   <result-templates>

       <result-template result-key="result">

         <template><![CDATA[

             <string>hello,${name}!<string>

         ]]></template>

       </result-template>

   </result-templates>

</mock-service>

它的意思是:mock的ServiceId是helloworld

有一个入参,是字符类型,名字叫:name,有一个出参,也是字符类型,名字是result

在后面定义了出差是result的结果,它实际是一段模板,这段模板采用了TinyTemplate模板引擎来解释执行,上面的意思是用输入的参数name的值来替换${name}这个占位符,所以这个服务就可以直接执行,并且会根据输入name的值的不同,而返回对应的值,比如:参数name的值是abc,那么返回的值就是hello,abc!

实际上,它也可以做复杂一点的场景:

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

<mock-service>

   <mock-service-info service-id="plus" >

      <parameters>

        <parameter name="a" type="java.lang.Integer" required="true" is-array="false"></parameter> <span></span> </parameters>

        <parameter name="b" type="java.lang.Integer" required="true" is-array="false"></parameter>  </parameters>

      <results>

        <parameter name="result" type="java.lang.Integer" required="true" is-array="false"></parameter>  </parameters>

      </results>

   </mock-service-info>

   <result-templates>

       <result-template result-key="result">

         <template><![CDATA[

             <integer>${a+b}<integer>

         ]]></template>

       </result-template>

   </result-templates>

</mock-service>

上面的这个MockService实现是可以真正完成加法运算的服务。

实际上,我们Mock出来的Service是真正的Service,它可以通过Json,Xml,WebService,等各种方式进行访问,实际上,对于调用者来说,它就是真正的Service,之所以我们Mock出来的Service可以骗过所有的使用者,是因为我们做了一个专门的服务加载器,把所有的MockService相关的信息读出来,并在服务框架进行注册,真正调用的时候,用调用MockServiceManager来进行真正的执行,执行过程就是读取这段模板并执行出结果之后,把结果返回。

后续,我们做对应的工具来编写这个Xml,那样做起来就更方便了。

时间: 2024-10-31 14:17:02

服务模拟-ServiceMock的相关文章

用Jersey构建RESTful服务4--通过jersey-client客户端调用Jersey的Web服务模拟CURD

一.总体说明 通过jersey-client接口,创建客户端程序,来调用Jersey实现的RESTful服务,实现增.删.改.查等操作. 服务端主要是通过内存的方式,来模拟用户的增加.删除.修改.查询等操作. 二.创建服务端 1.在上文项目中, 在"com.waylau.rest.resources.UserResource"中修改代码, 首先创建一个HashMap,用来保存添加的用户 private static Map<String,User> userMap = ne

微服务的4大设计原则和19个解决方案

作者|郝炎峰 编辑|小智 本文将介绍微服务架构的演进.优缺点和微服务应用的设计原则,然后着重介绍作为一个"微服务应用平台"需要提供哪些能力.解决哪些问题才能更好的支撑企业应用架构. 注:本文转载自公众号 EAWorld,已获授权. 写在前面 微服务架构现在是谈到企业应用架构时必聊的话题,微服务之所以火热也是因为相对之前的应用开发方式有很多优点,如更灵活.更能适应现在需求快速变更的大环境. 微服务平台也是我目前正在参与的,还在研发过程中的平台产品,平台是以 SpringCloud 为基础

微服务的4个设计原则和19个解决方案

微服务架构现在是谈到企业应用架构时必聊的话题,微服务之所以火热也是因为相对之前的应用开发方式有很多优点,如更灵活.更能适应现在需求快速变更的大环境. 本文将介绍微服务架构的演进.优缺点和微服务应用的设计原则,然后着重介绍作为一个"微服务应用平台"需要提供哪些能力.解决哪些问题才能更好的支撑企业应用架构. 微服务平台也是我目前正在参与的,还在研发过程中的平台产品,平台是以SpringCloud为基础,结合了普元多年来对企业应用的理解和产品的设计经验,逐步孵化的一个微服务应用平台. 一.微

WF4.0实战(十八):模拟asp.net生命周期

概述: 大多数.net程序员都熟悉:浏览器向iis服务器发送一个请求,会发生一些什么事情.今天,我将使用WF+WCF模拟一下整个处理过程.当 然这里只是模拟,与实际还是有差距的,如果叙述的有问题,请指出.主要是为了说明:用流程的视觉去看待asp.net请求处理过程,你会 发现它其实不难.好了,还是照旧,先看效果,在说如何实现,最后总结,附代码下载. 对于一个来自客户端的请求,我将iis的处理总结为两个流程 1.创建Asp.net环境(如果是第一次请求) 2.使用MHPM处理请求(M:HttpMo

管理型安全服务的重点领域及发展趋势

本文讲的是管理型安全服务的重点领域及发展趋势,[IT168 资讯]管理型安全服务到目前为止已经出现很长时间了.但是,这个市场的趋势已经从杀毒.反垃圾邮件.防火墙.入侵防御/入侵检测等基本的管理型安全服务向各种创新的服务发展了.我们将在这篇文章中讨论这些新的趋势. 管理型安全服务向企业提供各种优势.例如,找到一些安全专家仍然是一个难题,即使一个企业想雇佣一个有经验的安全专家,保留这个专家也是一个难题,因为企业不能像他们提供更多的增长. 采用管理型的安全服务,企业能够节省成本(也就是雇佣安全专家的成

区块链与微服务天生是一对

本文讲的是区块链与微服务天生是一对,为分布式应用而生的微服务与区块链技术是天生的一对 这期说说区块链技术与微服务架构的关系.大家知道,微服务架构是一个分布式的应用技术架构,目的是有效的对应用进行拆分,实现敏捷开发.快速演化.便捷容错与弹性伸缩.前面说到,区块链技术本质上就是分布式数据库,微服务架构与区块链技术的结合,并不能简单的看成是微服务与数据库的结合,而应该把区块链平台做为一个第三方应用进行交互,这也是微服务架构很好发挥作用的地方. 虽然目前的区块链平台一般都有SDK和REST服务两种方式,

为什么微服务需要API网关?

本文讲的是为什么微服务需要API网关?[编者的话]James Higginbotham.API架构师,现供职于LaunchAny.这是一家API咨询公司,帮助其合作伙伴完善API设计与管理. 随着以API产品化和以其为中心的IT计划的兴起,API网关和管理层变得很通用.我们应该为微服务考虑API网关吗?如果是这样,它们能提供什么收益吗? API网关是什么? API网关可以提供一个单独且统一的API入口用于访问内部一个或多个API.它们典型的会提供访问频率限制层和安全层.但诸如Tyk.io这样的A

C++事件驱动型银行排队模拟_C 语言

最近重拾之前半途而废的C++,恰好看到了<C++ 实现银行排队服务模拟>,但是没有实验楼的会员,看不到具体的实现,正好用来作为练习.  模拟的是银行的排队叫号系统,所有顾客以先来后到的顺序在同一个队列中等待,当有服务窗口空闲时,则队首的顾客接受服务,完成后则下一位顾客开始接受服务.  本实现是事件驱动型的,处理对象是事件而不是顾客:  有2种事件:顾客到事件和顾客离开事件.  有2个队列:顾客队列和事件队列.  程序的逻辑如下:  1.初始化事件队列,填充顾客到达事件:  2.处理事件队列的头

ASP.NET调试问题与解决

asp.net|解决|问题   from msdn: ASP.NET调试. 注 如果在本部分中找不到需要的错误消息,请查看处理常规调试问题部分或处理远程调试问题部分. 消息:无法在 Web 服务器中启动调试. 图 1. 无法启动调试错误消息 原因 1:未将 IIS 应用程序配置为使用 Integrated Windows Authentication.确保已选中"Authentication Method"对话框中的 Integrated Windows Authentication