Leader请求在做Junit测试的时辰,Mock掉各个办法之间的依附。这两天进修了下PowerMock的应用。

  PowerMock是EasyMock的一个扩大,参加了static,final,private,以及constructor的Mock功能。然则PowerMock并没有持续EasyMock的一些测试功能,所以不克不及庖代EasyMock,而零丁应用。在很多时辰必必要PowerMock和EasyMock彼此连络,以及加上WhiteBox,才干更好实现测试。

  1. 必不成少的一步:添加测试运行器@RunWith(PowerMockRunner.class),若是没有添加这个运行器,则应用的是默认的JUnit4.class。在PrepareForTest中参加测试class。@PrepareForTest(测试.class)

  2. Construtor

    public class A{
        public void doA(){
          B.doB();
          }
      }

    public class B{
       public B(){
           System.out.println("can""t be here!");
        }
    }

    测试classA中的doA办法:

  @RunWith(PowerMockRunner.class)
  @PrepareForTest({A.class})
  public class ATest {

   @Test
      public void testdoA() throws Exception {
          B mockB = PowerMock.createMock( B.class );
          PowerMock.expectNew( B.class ).andReturn(mockB);
          A testA = new A();
          PowerMock.replayAll();
          testA.doA();
          PowerMock.verifyAll();
      }

  }

  3.static

    测试static办法的时辰必必要加上@PrepareForTest(静态办法.class),不然就会抛出java.lang.IllegalStateException: no last call on a mock available异常。若是有多个class,用{},例如@PrepareForTest({A.class,B.class})

    public class A{
        public void doA(){
          B.doB();
        }
    }

    public class B{
        public static String doB() {
          return ("can""t be here !");
        }
    }

    测试classA中的doA办法:

    @RunWith(PowerMockRunner.class)
    @PrepareForTest({A.class, B.class})
    public class ATest {
        @Test
        public void testdoA() throws Exception {
            PowerMock.mockStatic( B.class );
            EasyMock.expect(B.doB()).andReturn("Mocked !");
            A testA = new A();
            PowerMock.replayAll();
            assertEquals("Mock not complete !", testA.doA(), "Mocked !");
            PowerMock.verifyAll();
        }
    }

  4.mock类中的Field

    一个好的Field应当有getter和setter,然则代码中没有,我们也可以用WhiteBox来Mock掉Field。

    public class A{
        private String C;

    public A(){
            C = "Can""t be here !";
        }
    
        public String doA(){
            return C;
        }
    
    }

    测试A中的doA办法

    @RunWith(PowerMockRunner.class)
    @PrepareForTest({A.class, B.class})
    public class ATest {

     @Test
        public void testdoA(){
            A testA = new A();
            String mockC = "Mocked !";
            Whitebox.setInternalState( testA, "C", mockC );
            assertEquals("Mock not complete !", testA.doA(), "Mocked !");
        }

    }

原网页网址:http://www.byywee.com/page/M0/S820/820868.html

PowerMock与EasyMock的应用(转)的更多相关文章

  1. powerMock比easyMock和Mockito更强大(转)

    powerMock是基于easyMock或Mockito扩展出来的增强版本,所以powerMock分两种类型,如果你习惯于使用easyMock的,那你就下载基于easyMock的powerMock,反 ...

  2. PowerMock使用遇到的问题——2

    如果在测一个类的某一个方法时,这个方法还调用了此类的其他方法,那么如何指定其他方法的返回值呢? Partial mock local private method or public method i ...

  3. PowerMockito(PowerMock用法)

    网络上大部分是powermock 的用法, PowerMock有两个重要的注解: –@RunWith(PowerMockRunner.class) –@PrepareForTest( { YourCl ...

  4. PowerMock简介

    PowerMock 写单元测试可能有些难.有时仅仅为了可测试性的目标而不得不牺牲好的设计.通常可测试性和好的测试之间是一致的,但是并不总是如此.比如,由于现存框架的限制,final classes.m ...

  5. mock测试之powermock

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

  6. PowerMock介绍

    一.为什么要使用Mock工具 在做单元测试的时候,我们会发现我们要测试的方法会引用很多外部依赖的对象,比如:(发送邮件,网络通讯,远程服务, 文件系统等等). 而我们没法控制这些外部依赖的对象,为了解 ...

  7. Mockito 库、powermock扩展

    转载:http://blog.csdn.net/kittyboy0001/article/details/18709685 Mockito 简介 Mockito 是目前 java 单测中使用比较流行的 ...

  8. PowerMock学习(六)之Mock Final的使用

    Mock Final mockfinal相对来说就比较简单了,使用powermock来测试使用final修饰的method或class,比较简单,接口调用部分,还是service调用dao. 对于接口 ...

  9. PowerMock框架讲解及使用

    为什么要使用PowerMock 现如今比较流行的Mock工具如jMock .EasyMock .Mockito等都有一个共同的缺点:不能mock静态.final.私有方法等.而PowerMock能够完 ...

随机推荐

  1. [转载] 一些非常好的 linux 基础工具

    http://linuxtools-rst.readthedocs.org/zh_CN/latest/index.html 作者整理的非常好, 需要的时候可以拿来参考

  2. 在Spark上用Scala实验梯度下降算法

    首先参考的是这篇文章:http://blog.csdn.net/sadfasdgaaaasdfa/article/details/45970185 但是其中的函数太老了.所以要改.另外出发点是我自己的 ...

  3. you don't have permission to view it 解决

    the file couldn't be opened because you don't have permission to view it   简单设置下面的选项即可,不要谢我啊! change ...

  4. 【linux】设置 tomcat 开机启动

    方法一: linux 下tomcat开机自启动修改Tomcat/bin/startup.sh 为: export JAVA_HOME=/usr/java/j2sdk1.4.2_08 export CL ...

  5. JavaScript设计模式与开发实践 - 单例模式

    引言 本文摘自<JavaScript设计模式与开发实践> 在传统开发工程师眼里,单例就是保证一个类只有一个实例,实现的方法一般是先判断实例存在与否,如果存在直接返回,如果不存在就创建了再返 ...

  6. STM8s窗口看门狗

    看看窗口看门狗的框图 从图里看出产生复位信号有2个方式: 1 WDGCR寄存器的T6 由1变0,也就是从此寄存器的值从0x40变成0x3F会产生复位信号: 2 当寄存器WDGCR的值大于WDGWR的时 ...

  7. 关于e820cycles参数

    关于e820cycles参数http://bbs.wuyou.net/forum.php?mod=redirect&goto=findpost&ptid=327458&pid= ...

  8. 【Problem solved】 error C2665: “loadimage”: 2 个重载中没有一个可以转换所有参数类型

    选择“项目”菜单->项目属性->配置属性->常规->字符集,改为“未设置”即可.

  9. jmeter生成报告指示板

    JMeter支持仪表板图表和报告生成 数据从一个测试计划. 这一章描述了如何配置和使用生成器. 概述 JMeter的仪表板生成器是一个模块化的扩展. 它的缺省行为是读取和处理样本 CSV文件生成HTM ...

  10. robot API笔记5

    实现了 Libdoc 工具. 命令行Libdoc入口点和编程接口 提供的是单独的吗 robot.libdoc 模块. 这个包被认为是稳定的但不是公共API的一部分. robot.libdocpkg.L ...