Java反射メカニズムを使用してプライベートメソッドをテストする方法

4668 ワード

今日、プロジェクトにプライベートメソッドを追加しました.テスト例を追加する必要があります.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 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 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メソッドが存在するクラスのインスタンスが必要であり、このクラスのバイトコードファイルも取得し、バイトコードファイルで対応するメソッドを取得し、メソッドを実行可能にする必要があることがわかる.反射メカニズム呼び出しメソッドの戻り値がオブジェクトであることにも注意してください.