如何使用java反射机制测试私有方法

今天在项目中添加了一个私有方法,需要添加测试用例,学习了下用java反射机制测试私有方法,分享如下:

-首先私有方法如下(所在类为YoukuUploaderImpl):

private String checkUrl(String creativeUrl,CreativeAuditInfoView caiv){
        if (null == caiv) {
            log.error("creativeAuditInfoView is null.");
            return null;
        }
        if (null == targetService) {
            targetService = (TargetService) DspApplicationContextUtil.getContext().getBean("targetService");
        }
        List<FlightTraffic> trafficList = null;
        try {
            trafficList = targetService.getAllTrafficByFlight(caiv.getFlightID());
        } catch (TargetException e) {
            log.error("YoukuUploaderImpl.checkUrl.trafficList", e);
            return null;
        }
        if (null != trafficList) {
            for (FlightTraffic traffic : trafficList) {
                if(traffic.getType().intValue() != 2){
                    return creativeUrl;
                }else{
                    break;
                }
            }
        }
        String[] spUrlPoint = creativeUrl.split("\\.");
        String endUrlPoint = spUrlPoint[spUrlPoint.length - 1];
        if(endUrlPoint!=null && endUrlPoint.toLowerCase().equals("html")){
            return creativeUrl;
        }
        String[] spUrlMark = creativeUrl.split("\\?");
        if(spUrlMark.length==2){
            return spUrlMark[0]+".html";
        }
        return null;
    }

测试类中是这样写的:

public String CheckUrlByReflect(String str)throws SecurityException, NoSuchMethodException, IllegalArgumentException, 
            IllegalAccessException, InvocationTargetException{
        YoukuUploaderImpl youkuUploaderImpl = new YoukuUploaderImpl();
        youkuUploaderImpl.setTargetService(targetService);
        Class<YoukuUploaderImpl> clazz=YoukuUploaderImpl.class;
        Method method=clazz.getDeclaredMethod("checkUrl",new Class[]{String.class,CreativeAuditInfoView.class});
        method.setAccessible(true);
        Object object = method.invoke(youkuUploaderImpl, new Object[]{str,build(1,1)}); 
        String json = object==null ? "" : object.toString();
        log.info("json:"+json);
        return json;
    }

可以看出,利用反射机制调用私有方法时,首先需要new一个方法所在类的实例,还要获取这个类的字节码文件,然后用字节码文件获取相应的方法,并且要将方法设为可执行。
同时注意到反射机制调用方法的返回值是一个对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值