mock测试之powermock

mock测试之powermock,第1张

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);

      }

   }

}

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/586799.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-12
下一篇 2022-04-12

发表评论

登录后才能评论

评论列表(0条)

保存