mock测试
Motan提供两种mock方式,一种是通过Filter机制进行mock,另一种是在protocol协议层进行mock,两种方式都可以分别在server端和client端生效。
使用ServiceMockFilter进行mock
ServiceMockFilter使用方式为
1、配置filter="mock" , 加载ServiceMockFilter
2、设置mock="*",其中的值类型
1)、false:不使用mock
2)、return某个类型值: 包括returnempty、returnnull、returntrue、returnfalse、return,其中代表string类型的值。
3)、mock类全名:mock类必须为声明的interface的实现类,并且有默认构造函数。
3、client进行mock时,只对请求进行mock,服务发现必须能找到至少一个server,可以通过directUrl配置一个不存在的服务,例如,check=false,directUrl="127.0.0.1:8002“
具体实现可以参考ServiceMockFilter类
使用mock协议
方式如下:
1、实现自定义mock协议类,继承AbstractMockRpcProtocol,实现processRequest方法(自定义mock逻辑)。
2、添加spi声明 @SpiMeta(name = "your_mock_protocol") ,在META-INF/services/com.weibo.api.motan.rpc.Protocol文件中添加mock协议类的类全名。spi扩展方式见编写Motan扩展
3、配置motan:protocol 为SpiMeta中声明的名字,即name=your_mock_protocol,如果在client端mock,就在basicReferer或Referer中设置对应protocl;如果在server端mock,则在export中配置${mock协议的id}:port
具体实现可以参考AbstractMockRpcProtocol类