浏览 3085 次
锁定老帖子 主题:使用PowerMock来Mock静态函数
精华帖 (0) :: 良好帖 (5) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-03-31
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 { @Test public 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> 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |