服务模拟-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,那样做起来就更方便了。



相关文章
|
开发工具 git
TLS certificate verification has been disabled
TLS certificate verification has been disabled
1703 0
TLS certificate verification has been disabled
|
资源调度
Vue3+vite个人博客网站从0-1(项目环境搭建)
Vue3+vite个人博客网站从0-1(项目环境搭建)
932 0
Vue3+vite个人博客网站从0-1(项目环境搭建)
|
消息中间件 Kafka Python
Producer的错误处理与重试机制
【8月更文第29天】在分布式系统中,消息传递是核心组件之一,它通常通过消息队列(如 Kafka、RabbitMQ 或其他)来实现。当生产者尝试将消息发送到消息队列时,可能会遇到各种类型的故障,例如网络中断、服务器不可用等。为了确保消息的可靠传递,需要实现有效的错误处理和重试机制。
475 2
|
6月前
|
缓存 监控 安全
如何制作网站?网站制作步骤:
‌制作网站的核心步骤:明确核心内容、注册网址域名与租用服务器、页面风格确定、网站制作、测试优化及维护管理。
384 72
|
7月前
|
人工智能 算法 数据安全/隐私保护
[oeasy]python080如何生成验证码_随机数字密码_真随机
本文介绍了如何生成随机验证码的过程,从简单的随机数字生成到包含数字、大小写字母及符号的复杂验证码。通过 Python 的 `random` 和 `string` 模块,逐步扩展字符集并确保结果满足特定要求(如包含各类字符)。同时探讨了随机数生成的本质,指出计算机中的“随机”实际上是基于算法和种子值的伪随机,并非真正的物理随机。最后总结了验证码的生成原理及其在实际应用中的意义,为读者揭开日常生活中验证码背后的编程逻辑。
249 8
|
存储 算法 NoSQL
天呐!汇编语言竟如此神奇,从零到精通的学习指南带你开启计算机世界神秘大门!
【8月更文挑战第31天】汇编语言是一种底层编程语言,直接与硬件交互,对于理解计算机体系结构和底层原理至关重要。尽管现代软件开发中较少使用,但学习汇编语言有助于深入了解计算机如何执行指令、管理内存和处理数据,从而优化程序性能,进行底层系统开发和调试。不同处理器有不同指令集,如 x86 和 ARM,掌握这些指令集及寄存器、内存地址等基本概念是学习汇编语言的基础。通过简单示例开始,逐步掌握复杂指令和调试工具,可以大大提高编程技能和解决问题的能力。
267 1
|
存储 监控 安全
版本管理:促进团队协作与提升代码安全性的关键
在数字化时代,软件开发的规模和复杂性不断增加,版本管理成为团队协作和代码安全的重要手段。本文探讨了版本管理的概念、重要性及其在团队协作和代码安全中的作用,并介绍了板栗看板在版本管理中的应用,包括任务管理、代码审查、备份与恢复等功能,展示了其如何提高团队协作效率和代码安全性。
版本管理:促进团队协作与提升代码安全性的关键
|
11月前
|
数据可视化
教育工作高效协作教程:看板工具应用实操
2分钟学会如何为你的班级搭建可视化管理看板!
154 0
教育工作高效协作教程:看板工具应用实操
|
11月前
|
前端开发 JavaScript 开发工具
2024年前端开发的十大必备技巧
本文概述了2024年前端开发的十大关键技能,包括现代JavaScript、CSS Grid/Flexbox布局、主流框架精通、Web性能优化、Git版本控制、调试技巧、Web可访问性、现代构建工具使用、PWA开发及持续学习,旨在助力开发者提升Web开发质量和用户体验。
|
12月前
|
存储 编解码 算法
视频编码格式和封装格式有什么关系?相机常见的编码格式有哪些?
视频编码格式与封装格式的关系类似于酒与酒瓶的关系。编码格式是视频的核心内容,如H.264、H.265等,而封装格式则是将视频、音频、字幕等集成在一起的外壳,如MP4、MKV等。不同的封装格式适应不同的播放需求,例如MP4兼容性最好,MKV适合网络传播。
下一篇
oss教程