首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

施用PowerMock来Mock静态函数

2012-12-28 
使用PowerMock来Mock静态函数EasyMock和Mockito等框架,对static, final, private方法均是不能mock的。 这些

使用PowerMock来Mock静态函数
      EasyMock和Mockito等框架,对static, final, private方法均是不能mock的。 这些框架普遍是通过创建Proxy的方式来实现的mock。 而PowerMock是使用CGLib来操纵字节码而实现的mock,所以它能实现对上面方法的mock。今天先来看一个简单的例子吧:

第一个注解是指定Runner
第二个是你要测试的类,这个里面调用了静态类

下面我结合EasyMock给一个简单的例子:


import java.io.IOException;public class SystemPropertyMockDemo {public String getSystemProperty() throws IOException {return System.getProperty("property");}}


import org.easymock.EasyMock;import org.junit.Assert;import org.junit.Test;import org.junit.runner.RunWith;import org.powermock.api.easymock.PowerMock;import org.powermock.core.classloader.annotations.PrepareForTest;import org.powermock.modules.junit4.PowerMockRunner;@RunWith(PowerMockRunner.class)@PrepareForTest({SystemPropertyMockDemo.class})public class SystemPropertyMockDemoTest {@Testpublic void demoOfFinalSystemClassMocking() throws Exception {PowerMock.mockStatic(System.class); EasyMock.expect(System.getProperty("property")).andReturn("my property"); PowerMock.replayAll(); Assert.assertEquals("my property",                                  new SystemPropertyMockDemo().getSystemProperty()); PowerMock.verifyAll();}}


测试用例里面增加了PrepareForTest注解,表明要测试的类,里面包含静态方法的调用。
然后在测试类里面指定要测试的静态类和它的方法。
实际上PowerMock是在EasyMock上面做了扩展,这些写法都是和EasyMock相同的。
今天先写这么一个简单的例子,然后以后会将用到的都写上来。

当然了,更多的可以参考:
http://code.google.com/p/powermock/

另外它的maven依赖如下,我在使用的时候就弄错了

<dependency>      <groupId>org.powermock</groupId>      <artifactId>powermock-module-junit4</artifactId>      <version>1.4.8</version>      <scope>test</scope>   </dependency>   <dependency>      <groupId>org.powermock</groupId>      <artifactId>powermock-api-easymock</artifactId>      <version>1.4.8</version>      <scope>test</scope>   </dependency>  

热点排行