# mock-proxy **Repository Path**: li_shi_long/mock-proxy ## Basic Information - **Project Name**: mock-proxy - **Description**: 基于spring框架的mock代理 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-04-24 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # mock-proxy 基于spring框架的mock代理组件,可以在Junit里面mock远程调用的接口,数据库返回的值,缓存redis(还没开发)。 摒弃现有的mock框架,需要自己写额外的代理类。 通过本组件,不需要修改业务代码,不需要写mock代理类,只需要根据自己配置添加返回类型的信息,甚至可以零配置,就可以mock接口。本组件针对基本类型有默认返回值,如果是自定义类,会递归查找字段进行赋值。 通过以下配置,只需要在junit里面调用自己本地的接口一样。 **注意:**Map接口实现类如果没有自定义会返回null,List,Set接口实现类,没有自定义会自动构建返回值。 要求版本:JRE1.6以上,Spring3.3以上 # 使用说明(需要在用到的项目里添加信息) 1. 在pom.xml引入maven ```xml com.sdlisilong.mockproxy mock-proxy 1.1.0-SNAPSHOT ``` 2. 在spring.xml里添加配置 ```xml ``` 3. 在classpath目录下添加mockProxy.properties,内容为 ```properties enabled=true #是否开启代理 enabledProxyDubbo=true #开启dubbo代理,默认false daoPackage=com.dao #需要代理数据库返回数据的dao层,添加包名 #被代理类的路径前缀,可以是包名,也可以是完整的类路径,多个用,隔开 proxyClassPathPrefix=com.redis,com.mq #配置以下结尾的测试方法名用哪个配置文件:如果值为Fail,则test类里的方法名testDubboFail会查询mockProxy-Fail.properties配置里的信息 customConfigAndMethodPrefix=Fail,Success ``` 4. 添加代理接口返回值配置信息mockProxy-default.properties: ```properties #返回List的配置 com.dao.Test.getList=[\"cc\",\"11\"] #返回bean信息的配置 com.dao.Test.getObject={id:1,cashId:22222} #返回List的配置 com.dao.Test.getObjectList=[{productId:111,productName:\"测试产品\"}] ``` 如上所示,如果需要配置mock接口返回值,需要添加JSON字符串格式。 你还可以根据返回类型,配置默认返回信息,如: 如果要配置方法返回值为com.test.entity.TestJavaBean,则可以直接配置 com.test.entity.TestJavaBean={id:1,name:\\"Hanmeimei\\"} 如果是基本类型,会有默认返回值String=1,int=1,boolean=true,如果需要自定义,则可以java.lang.String=Test 5. 可以实现根据测试方法后缀自动匹配对应的返回值配置文件: test类需要继承BaseTest,假如有两个测试方法 ```java @Test public void testDubbo(){ } @Test public void testDubboFail(){ } ``` 我们定义了两个配置文件 mockProxy-default.properties mockProxy-Fail.properties 那么testDubbo方法会找默认的配置文件mockProxy-default.properties,testDubboFail方法会按照后缀Fail匹配到mockProxy-Fail.properties,获取返回值。 6. 如果以上都无法满足你,提供了SPI扩展接口,需要在META-INF下面添加文件mock-proxy.config, ``` #被代理的接口,只需要在ProxyClass类里添加要代理的方法,不需要implements接口,只需要实现需要自定义的方法即可,不用都实现。注意:方法要和被代理的方法名字、入参、返回类型都要保持一致 com.rpc.Service=com.my.ProxyClass ``` # 示例 ```java @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations={"classpath*:spring/applicationContext.xml"}) public class ServiceTest { @Resource Service service; @Resource DubboService dubboService; @Resource Dao dao; @Test public void testDubbo(){ com.test.entity.TestJavaBean bean = dubboService.getById("1"); System.out.println(JSON.toJSONString(bean)); } @Test public void testGetProduct(){ List list = dao.getList(); System.out.println(JSON.toJSONString(list)); } @Test public void testQuery(){ Set set = dao.getSet("test"); System.out.println(JSON.toJSONString(set)); } @Test public void getList(){ String id = dao.getId("name"); System.out.println(JSON.toJSONString(id)); } } ```