PowerMock简介
单元测试模拟框架:为了编写某一个函数的单元测试,程序员必须进行十分繁琐的初始化工作,以保证被测试函数中使用到的环境变量以及其他模块的接口能返回预期的值,有些时候为了单元测试的可行性,甚至需要牺牲被测代码本身的结构。单元测试模拟框架则极大的简化了单元测试的编写过程:在被测试代码需要调用某些接口的时候,直接模拟一个假的接口,并任意指定该接口的行为。这样就可以大大的提高单元测试的效率以及单元测试代码的可读性。
Mock 方法是单元测试中常见的一种技术,它的主要作用是模拟一些在应用中不容易构造或者比较复杂的对象,从而把测试与测试边界以外的对象隔离开,真正的形成“单元测试”,而不会因为依赖对象对测试产生影响。
- Mock的大体步骤:
1).创建Mock对象
2). 录制信息,即设定Mock对象的预期行为和输出,所有Mock对象需要执行的方法都必须录制
3).录制完成,切换replay状态
4).调用实际的方法,利用 Mock 对象方法进行实际单元测试;
5).验证,对 Mock 对象的行为进行验证 - 重要概念:
在一个完整的测试过程中,一个 Mock 对象将会经历两个状态:Record 状态和 Replay 状态。Mock 对象一经创建,它的状态就被置为 Record。在 Record 状态,用户可以设定 Mock 对象的预期行为和输出,这些对象行为被录制下来,保存在 Mock 对象中。
将 Mock 对象切换到 Replay 状态: 在使用 Mock 对象进行实际的测试前,我们需要将 Mock 对象的状态切换为 Replay。在 Replay 状态,Mock 对象能够根据设定对特定的方法调用作出预期的响应。
在利用 Mock 对象进行实际的测试过程之后,对 Mock 对象的行为进行验证。 - PowerMock简介
EasyMock 以及 Mockito 都因为可以极大地简化单元测试的书写过程而被许多人应用在自己的工作中,但是这两种 Mock 工具都不可以实现对静态函数、构造函数、私有函数、Final 函数以及系统函数的模拟,但是这些方法往往是我们在大型系统中需要的功能。PowerMock 是在 EasyMock 以及 Mockito 基础上的扩展,PowerMock 实现了之前提到的所有模拟功能,使其成为大型系统上单元测试中的必备工具。
PowerMock四种方法例子:
1.私有方法
privatemethod / DataServiceTest
privatemethod / PrivateMethodDemoTest
2.静态方法
staticmethod / ServiceRegisterTest
3.构造方法
constructionMethod / PersistenceManagerTest
4.Final方法
finalmethodsOrClass / StateFormatterTest
PowerMock 官网:http://code.google.com/p/powermock/