注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

和申的个人主页

专注于java开发,1985wanggang

 
 
 

日志

 
 

Dubbo2 单元测试时Mock功能说明  

2011-11-22 14:59:17|  分类: 阿里巴巴开源代码 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

在 intl-test 1.0.3 中增加了关于 Dubbo2 mock 的两个配置项:

testcase.mock.dubbo.filter
testcase.mock.dubbo.protocol

当上面两个配置项任何一个配置为 true 时,程序自动设计没有 privider 也能正常启动。

dubbo2原理说明:
配置项: <dubbo:reference/> 【详见:http://code.alibabatech.com/wiki/display/dubbo/User+Guide#UserGuide-%3Cdubbo%3Areference%2F%3E
在 Spring 加载 dubbo 配置文件时,载入 META-INF/spring.handlers 时替换掉 dubbo 的 NameSpaceHandler ,让 Spring 加载单元测试中的 NameSpaceHandler ,在加载配置项dubbo:reference 时,指定 check 为 {{false ,如果配置了 filter 配置项,那么同时指定 filter="testFilter" ,如果指定的 protocol 配置项,则修改com.alibaba.dubbo.common.ExtensionLoader 中的 cachedAutowires 让 dubbo 找到单元测试指定的 protocol 。

Dubbo2 实现原理请参看:http://code.alibabatech.com/wiki/display/dubbo/Developer+Guide

testcase.mock.dubbo.filter=true

当 testcase.mock.dubbo.protocol 未配置或配置为 true 时生效。
该配置情况下,需要能连接到注册中心,当没有提供 mock 方法时,自动调用远程实现。

testcase.mock.dubbo.protocol=true

该配置情况下,不需要连接到注册中心,当没有提供 mock 方法时,程序抛出异常。

Sample:

@TestCaseInfo(autoWire = false)
public class AntiSpamTest extends BaseTestCase {
 
    public static class XXX {
 
        public Map<String, String> service(Map<String, Object> params) {   // << 函数签名和接口中被调用的签名一致
            System.err.println("HELLO");
            return new HashMap<String, String>();
        }
    }
 
    @Test
    @DubboMock(int1 = RiskService.class, imp1 = XXX.class)   // << 指定接口,实现类(实现类不需要实现指定接口,只要签名相同就可以了)
    // 可以指定多个接口和实现:  int2 >> imp2
    //                       int3 >> imp3
    //                       int4 >> imp4
    //                       int5 >> imp5
    //                       int6 >> imp6
    // 如何超过6个则可以通过 Dubbo2InvokeUtil.register(Class<?> interfaceName, Object implement) 注册
    public void testForBug() {
        IprMatcher im = RiskClientServicesLocator.getIprMatcher();
        RiskService riskService = (RiskService) ReflectUtil.getObject(ProxyDepackageUtil.getLastDepackageObject(im),
                                                                      "riskService");
        System.err.println(riskService.service(null));
    }
 
}

OUTPUT:

HELLO
{}

  评论这张
 
阅读(4618)| 评论(1)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016