本文共 2532 字,大约阅读时间需要 8 分钟。
在软件开发过程中,经常会有如下情况发生:
Tiny框架为了避免上述问题,增加了ServiceMock工程,顾名思义就是Mock一个服务,它的访问接口和真实的完全一致,但是内部的实现却是虚假的,这样就可以比较好的解决上面的问题:
下面就用一个具体的例子来进行说明:
编写下面的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,那样做起来就更方便了。
转载地址:http://btjml.baihongyu.com/