PowerMock – 快速入门

2017年10月20日 1 条评论 319 次阅读 2 人点赞

引言

       Bug(程序错误),是程序设计中的术语,是指在软件运行中因为程序本身有错误而造成的功能不正常、死机、数据丢失、非正常中断等现象。有些程序错误会造成计算机安全隐患,此时叫做漏洞。
       Bug Free是借鉴微软的研发流程和Bug管理理念,使用PHP+MySQL独立写出的一个Bug管理 系统。简单实用、免费并且开放源代码(遵循GNU GPL)。 命名BugFree 有两层意思:一是希望软件中的缺陷越来越少直到没有,Free嘛;二是表示它是免费且开放源代码的,大家可以自由使用传播。
      单元测试(英语:Unit Testing)又称为模块测试,是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作。程序单元是应用的最小可测试部件。在过程化编程中,一个单元就是单个程序、函数、过程等;对于面向对象编程,最小单元就是方法,包括基类(超类)、抽象类、或者派生类(子类)中的方法。

什么是Power Moc

       PowerMock是一个Java模拟框架,通过提供定制的类加载器以及一些字节码篡改技巧的应用,PowerMock 现了对静态方法、构造方法、私有方法以及 Final 方法的模拟支持,对静态初始化过程的移除等强大的功能。可用于解决通常认为很难甚至无法测试的测试问题。使用PowerMock可以模拟静态方法,删除静态初始化程序,允许模拟而不依赖于注入等。PowerMock 通过在执行测试时在运行时修改字节码来完成这些技巧。PowerMock还包含一些实用程序,可更轻松地访问对象的内部状态。
      没有Mock框架以前大都通过衍生对象来进行Mock,随后出现了JMock、Easy Mock、Mockito等Mock框架,Power Mock基于Eeasy Mock和Mockito框架来实现,目前基于Power Mock和JUit来进行单元测试的公司还是比较多。

Power Mock Maven依赖

Power Mock 快速入门

开始使用Power Mock编写单元测试以前可以对比下常规JUnit单元测试、Mockito和Power Mock的区别与相似的地方。

常规单元测试

常规单元测试采用JUnit编写,其中可以存在较重的Dao层。

Book

BookDao

BookService

BookServiceWithJUnit

从上图可以看到单元测试顺利通过并且断言成功,这是目前常用的最简单的方式,无论测试类轻重都可以通过代码实现,只是偶尔略显繁琐。

Mockito单元测试

Book,BookDao和BookService我们直接使用上面示例中的即可,重点是Mockito的使用。

使用Mockito不仅省去了我们new各种实例的繁琐操作,而且生成的mock对象可以复用。在无法访问依赖服务的情况下需要测试的对象可以安装提前录制好的行为在调用时进行回放,结合断言可以预测返回结果。

Power Mock单元测试

同样Book,BookDao和BookService直接使用上面示例中的即可,此次采用Power Mock进行测试。

通过对比可能发现Mockito和Power Mock API使用起来差别不大,但是为什么选择Power Mock而不是直接用Mockito呢?PowerMock可以模拟静态方法,删除静态初始化程序,允许模拟而不依赖于注入等,而Mockito则不支持某些操作,比如对final修饰类的Mock等。本次通过对比先熟悉下Power Mock的由来与简单使用,后续将从变量、方法、常用类与接口方面详细介绍。

 

 

重剑无锋,大巧不工。

文章评论(1)

  • jm

    看起来很牛逼,感谢博主分享。

    2019年10月26日