zoukankan      html  css  js  c++  java
  • UT技巧

    (一)PowerMockito进行UT测试如何略过方法,使方法不被执行(含私有方法):

          

           PowerMockito.doNothing().when(TestMock.class,"foo1");//仅适用于方法返回值为void类型

         

           PowerMockito.suppress(PowerMockito.methods(TestMock.class, "foo1"));//适用于任何方法

           

     

     

           

           (二)调用私有方法的两种方式:1.JDK反射 2.PowerMockito自带method接口

            

     

            //样例1:JDK反射

            Method method = TestMock.class.getDeclaredMethod("testPrivate1");

            method.setAccessible(true);

            String invoke = (String) method.invoke(TestMock.class, "hello world");

            System.out.println(invoke)

       如果testPrivate1是静态私有方法,可以用上述调用方法,

      如果是非静态私有方法,String invoke = (String) method.invoke(TestMock.class, "hello world");这里的class应该改为对象

     

            //******PowerMockito method接口*******

     

            //样例2:基本类型参数

            Method method = PowerMockito.method(TestMock.class,"testPrivate2", String.class);

            String invoke = (String) method.invoke(TestMock.class, "hello world");

            System.out.println(invoke);

     

            List<String> dataList = new ArrayList<String>();

            dataList.add("1");

            dataList.add("2");

            dataList.add("3");

     

            //样例3:常见应用类型参数

            Method method = PowerMockito.method(TestMock.class,"testPrivate3", List.class);

            String invoke = (String) method.invoke(TestMock.class, dataList);

            System.out.println(invoke);

     

            //样例4:不带泛型

            Method method = PowerMockito.method(TestMock.class,"testPrivate4", ArrayList.class);

            String invoke = (String) method.invoke(TestMock.class, dataList);

            System.out.println(invoke);

     

            //样例5:带泛型(常见错误用法:ArrayList<String>.class)

            Method method = PowerMockito.method(TestMock.class,"testPrivate4", new ArrayList<String>().getClass());

            String invoke = (String) method.invoke(TestMock.class, dataList);

            System.out.println(invoke);

     

            //样例6:数组参数

            Method method = PowerMockito.method(TestMock.class, "testPrivate5", String[].class);

            String invoke = (String) method.invoke(TestMock.class, new Object[]{new String[]{"1","2","3"}});//注意invoke方法入参,此处必须为new Object[]{},否则会出现参数异常

            System.out.println(invoke);

     

     

     

         (三)Whitebox.setInternalState接口用法

     

          该方法可以向被测试类注入引用类型,不管被修改的成员变量是否是final类型。如下:向DataFileHandler类的private static final logger成员变量注入fakeLogger对象。

     

             FakeLogger fakeLogger = new FakeLogger(DataFileHandler.class.getName());

             Whitebox.setInternalState(DataFileHandler.class, "logger", fakeLogger);

     

         注意:该接口无法向被测类的基本类型的final成员变量注入,如:private static final String,但可以向非final的成员变量注入,如:private stat

  • 相关阅读:
    sql in not in 案例用 exists not exists 代替
    根据算法规则进行匹配相似车辆
    随机生成临时车牌号
    无法加载 DLL“ParkCOM.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E) 终结者
    c# 除掉前三个字符,剩下的4个字符全为数字方为特殊车辆
    UI设计文本框解决Placeholder的在IE10 以下 IE 9 IE8 IE 7 的兼容问题
    EF框架 对字段属性为NULL的空值处理 类型前面加上?保证EF列表读取显示数据不会报异常
    boost::property_tree读取解析.xml文件
    C++ URLencode library
    http与中文编码传输
  • 原文地址:https://www.cnblogs.com/mu-tou-man/p/6494922.html
Copyright © 2011-2022 走看看