zoukankan      html  css  js  c++  java
  • mock测试之powermock

    由于公司框架依赖别的模块, 导致我们开发老是需要跟着他们的脚步, 所以我的上级领导提出这个方案说直接跳过他们,我们自己在本地测试,然后就找了它,

    导入相关jar

                  <dependency>
                         <groupId>org.powermock</groupId>
                         <artifactId>powermock-api-mockito</artifactId>
                         <version>1.4.12</version>
                         <scope>test</scope>
                  </dependency>
                  <dependency>
                         <groupId>org.mockito</groupId>
                         <artifactId>mockito-all</artifactId>
                         <version>1.8.5</version>
                         <scope>test</scope>
                  </dependency>
                  <dependency>
                         <groupId>org.powermock</groupId>
                         <artifactId>powermock-module-junit4</artifactId>
                         <version>1.4.12</version>
                         <scope>test</scope>
                  </dependency>

    PowerMock介绍与使用

    一、为什么要使用Mock工具

          在做单元测试的时候,我们会发现我们要测试的方法会引用很多外部依赖的对象,比如:(发送邮件,网络通讯,远程服务, 文件系统等等)。 而我们没法控制这些外部依赖的对象,为了解决这个问题,我们就需要用到Mock工具来模拟这些外部依赖的对象,来完成单元测试。

    二、为什么要使用PowerMock

          现如今比较流行的Mock工具如jMock EasyMock 、Mockito等都有一个共同的缺点:不能mock静态、final、私有方法等。而PowerMock能够完美的弥补以上三个Mock工具的不足。

    三、PowerMock简介

          PowerMock是一个扩展了其它如EasyMock等mock框架的、功能更加强大的框架。PowerMock使用一个自定义类加载器和字节码操作来模拟静态方法,构造函数,final类和方法,私有方法,去除静态初始化器等等。通过使用自定义的类加载器,简化采用的IDE或持续集成服务器不需要做任何改变。熟悉PowerMock支持的mock框架的开发人员会发现PowerMock很容易使用,因为对于静态方法和构造器来说,整个的期望API是一样的。PowerMock旨在用少量的方法和注解扩展现有的API来实现额外的功能。目前PowerMock支持EasyMock和Mockito。

    四、PowerMock入门    

          PowerMock有两个重要的注解:

          –@RunWith(PowerMockRunner.class)

          –@PrepareForTest( { YourClassWithEgStaticMethod.class })

          如果你的测试用例里没有使用注解@PrepareForTest,那么可以不用加注解@RunWith(PowerMockRunner.class),反之亦然。当你需要使用PowerMock强大功能(Mock静态、final、私有方法等)的时候,就需要加注解@PrepareForTest。

    五、PowerMock基本用法

    PowerMock要使用PowerMock强大功能(Mock静态、final、私有方法等)的时候,需要使用@RunWith(PowerMockRunner.class)

     @PrepareForTest( { YourClassWithEgStaticMethod.class })表示的是要测试的类,这个里面调用了静态类

    例子:

    这个类里面的方法调用了需要mock类的方法

    public class BussMana {
    
           public List<String> getList(){
    
                  System.out.println("调用~~~~");
    
                  return Interface.getList();//Interface是需要mock的类
    
           }
    
           public String getStr(){
    
                  return Interface.getString();
    
           }
    
    }

    这个类是需要mock的类

    public class Interface {
    
       public static List<String> getList() {
    
          System.out.println("调用 ZK");
    
          return new ArrayList<String>();
    
       }
    
       public static String getString() {
    
     
    
          return "nome";
    
       }
    
    }

    测试类

    @RunWith(PowerMockRunner.class)
    
    @PrepareForTest({Interface.class})//要测试的类,这个里面调用了静态类
    
    public class BussManaTest {
    
       static{
    
          PowerMockito.mockStatic(Interface.class);
    
       };
    
       public BussManaTest(){
    
       }
    
       @Test
    
       public void test() {
    
          //mock调用ZK的类
    
          List<String> list = new ArrayList<String>();
    
          list.add("123");
    
          list.add("1234");
    
          list.add("1235");
    
          try {
    
          //声明调用ZK时返回自己想要的值 
    
            PowerMockito.when(Interface.getList()).thenReturn(list);
    
          } catch (Exception e) {
    
            e.printStackTrace();
    
          }
    
          BussMana bm = new BussMana();
    
          //调用方法,方法里面调用了ZK,这里返回的时上面期望的返回值
    
          List<String> result = bm.getList();
    
          for (String str : result) {
    
            System.out.println(str);
    
          }
    
       }
    
    }
  • 相关阅读:
    Java的synchronized的同步代码块和同步方法的区别
    关于java字节码框架ASM的学习
    说说cglib动态代理
    Java虚拟机-JVM各种参数配置大全详细
    Permanent Space 和 Heap Space
    OOM三种情况
    Java性能调优(一):调优的流程和程序性能分析
    数学之路-python计算实战(17)-机器视觉-滤波去噪(中值滤波)
    使用 Pascal 脚本编写网页, PWP 项目
    android 4.0主线程訪问网络问题
  • 原文地址:https://www.cnblogs.com/cunkouzh/p/4922982.html
Copyright © 2011-2022 走看看