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. Echarts个人实例

    1.deviceOperateTrendIndex.jsp <%@ page language="java" contentType="text/html; cha ...

  2. velocity基础教程--1.标准使用(zhuan)

    http://llying.iteye.com/blog/387253 **************************** velocity是一个非常好用的模板引擎 这里不对项目进行详细介绍,可 ...

  3. SqlServer_事务

    事务处理是在数据处理时经常遇到的问题,经常用到的方法有以下三种总结整理如下:方法1:直接写入到sql 中在存储过程中使用 BEGIN TRANS, COMMIT TRANS, ROLLBACK TRA ...

  4. SecureCRT设置

    SecureCRT设置 文章来源:http://blog.csdn.net/dongqinliuzi/article/details/39890569 本文主要介绍SecureCRT的使用方法和技巧. ...

  5. contains

    ArrayLIst类使用contains方法时要注意:放入ArrayList中的类必须要重写equals方法(既然equals重写了,那么 hash方法也应该重写,这两个方法一般同时重写):如果不重写 ...

  6. python 图实现

    #coding:utf-8 __author__ = 'similarface' class Graph: def __init__(self,label,extra=None): #节点是类实例 s ...

  7. 【c++】读写txt

    #include<iostrea> #include<fstream> int main() { ofstream fout;// 创建一个ofstream对象 fout.op ...

  8. C++ Primer 第三章 标准库类型string运算

    1. 标准库类型 string string表示可变长的字符序列,使用string必须首先包含string头文件.如何初始化类的对象是由类本身决定的. int n; string s1;//默认初始化 ...

  9. 判断手机连接的是fdd还是tdd的办法

    判断手机连接的是fdd还是tdd的办法http://bbs.ydss.cn/thread-550035-1-1.html移动4G一般都是tdd,联通则可能有tdd,还有可能是fdd,判断手机连接的是t ...

  10. 使用ar命令删除iOS静态库重复编译的.o文件

    关于 xcode引入第三方静态类库 duplicate symbol _OBJC_XXX 重复编译错误 看这里 http://www.cnblogs.com/cocoajin/p/3917709.ht ...