2019独角兽企业重金招聘Python工程师标准>>>

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

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

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

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

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

编写下面的Xml文件:

<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!

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

<mock-service><mock-service-info service-id="plus" ><parameters><parameter name="a" type="java.lang.Integer" required="true" is-array="false"></parameter>  </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,那样做起来就更方便了。

转载于:https://my.oschina.net/tinyframework/blog/309878

服务模拟-ServiceMock相关推荐

  1. 基于Spring的AOP地铁乘坐服务模拟实验

    一.实验目的和要求: 1.实验目的 1.掌握Spring框架的搭建过程: 2.掌握IoC.DI及其Bean的装配方式: 3.掌握AOP的相关概念及其编程思想实现: 4.掌握基于XML配置及注解方式的声 ...

  2. Android 中 利用 AccessibilityService 辅助服务 模拟点击事件

    在 Android 中想要执行一些模拟点击操作,在无法修改页面源码的情况下,通常只能使用 adb 和借助辅助功能两种方式. Adb 方式 借助 adb shell 的命令,我们可以使用下面的方式模拟一 ...

  3. aws云服务模拟应用localstack

    地址:https://github.com/localstack/localstack 1.简介 LocalStack为开发云应用程序提供了易于使用的测试/模拟框架. 当前,重点主要放在支持AWS云堆 ...

  4. 京东抢购服务高并发实践

    为什么80%的码农都做不了架构师?>>> 服务介绍 限时抢购又称闪购,英文Flash sale,起源于法国网站Vente Privée.闪购模式即是以互联网为媒介的B2C电子零售交易 ...

  5. 微服务设计原则和解决方案

    一.微服务架构演进过程 近年来我们大家都体会到了互联网.移动互联带来的好处,作为IT从业者,在生活中时刻感受互联网好处的同时,在工作中可能感受的却是来自自互联网的一些压力,那就是我们传统企业的IT建设 ...

  6. Alibaba Cloud Toolkit 中SLS插件助力线上服务问题排查

    简介:Alibaba Cloud Toolkit 是一款非常优秀的插件,新增SLS日志服务的功能,针对软件开发者日常工作中常见的问题排查场景,将日志服务平台的功能集成到ide当中,省去了不同窗口之间来 ...

  7. Linux NTP服务配置

    一.NTP对时原理 NTP同步的方向是从stratum值较小的节点向较大的节点传播,如果某个NTP客户端接收到stratum比自己还要大,那么NTP客户端认为自己的时间比接受到的时间更为精确,不会进行 ...

  8. Nginx服务安全加固

    1.禁止频繁访问的ip访问nginx 生产环境中经常会遇到某个ip地址频繁异常的访问nginx网站,此时我们需要通过安全措施保护我们的服务器 部署nginx [root@localhost tools ...

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

    微服务架构现在是谈到企业应用架构时必聊的话题,微服务之所以火热也是因为相对之前的应用开发方式有很多优点,如更灵活.更能适应现在需求快速变更的大环境. 本文将介绍微服务架构的演进.优缺点和微服务应用的设 ...

最新文章

  1. 安卓gridview 网格,多行多列实现
  2. Redis学习-String
  3. 【Android 安装包优化】移除无用资源 ( 自动移除无用资源 | 直接引用资源 | 动态获取资源 id | Lint 检查资源 )
  4. Transformer在深度推荐系统中的应用及2019最新进展
  5. c# 注册表操作,创建,删除,修改,判断节点是否存在
  6. 分布式文件系统研究-测试-文件下载测试
  7. cocos2d-x游戏实例(3)-获得地图索引
  8. 使用python制作聊天框解谜游戏_使用Python写一个小游戏alien invasion!
  9. centos安装redmine项目管理系统
  10. 软中断网卡处理Linux高性能外部设备处理机制SMP
  11. asp.net引入一个js文件名为JScript的js脚本 报错 缺少对象
  12. 读书笔记之《大型分布式网站架构设计与实践》
  13. “百花齐放”电商时代,网易七鱼打造专业电商客服
  14. C语言学习路线,思维脑图,学单片机的一定要知道
  15. python代码实现进制转换
  16. 【配准论文解读】Color Point Cloud Registration with 4D ICP Algorithm
  17. 扫黑除恶Team第三次团队作业
  18. 用Python写一个天天酷跑
  19. 自然语言处理——实现美国总统就职演说词汇分布图
  20. Vivado使用:综合篇(二)综合选项设置

热门文章

  1. HomeZZ注册推介码
  2. 【JavaScript框架封装】公共框架的封装
  3. 简单比较搜索引擎与推荐系统
  4. Boost 编译链接
  5. Linux下解决用户不能执行sudo的方法
  6. 《R语言实战》读书笔记--第一章 R语言介绍
  7. WebLogic 数据源密码加密
  8. Oracle trunc()函数的用法
  9. 一个功能齐全的DataGrid分页例子
  10. PHPExcel对于Excel中日期和时间类型的处理