使用PowerMock来Mock静态函数

转载 2012年03月31日 13:37:31

使用PowerMock来Mock静态函数

转载于:http://www.zhujiangroad.com/program/Java/13146.html

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

第一个注解是指定Runner

第二个是你要测试的类,这个里面调用了静态类

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

Java代码

  1. import java.io.IOException;     
  2.     
  3. public class SystemPropertyMockDemo {     
  4.     public String getSystemProperty() throws IOException {     
  5.         return System.getProperty("property");     
  6.     }     

Java代码

  1. import org.easymock.EasyMock;     
  2. import org.junit.Assert;     
  3. import org.junit.Test;     
  4. import org.junit.runner.RunWith;     
  5. import org.powermock.api.easymock.PowerMock;     
  6. import org.powermock.core.classloader.annotations.PrepareForTest;     
  7. import org.powermock.modules.junit4.PowerMockRunner;     
  8.     
  9.     
  10. @RunWith(PowerMockRunner.class)     
  11. @PrepareForTest({SystemPropertyMockDemo.class})     
  12. public class SystemPropertyMockDemoTest {     
  13.     @Test    
  14.     public void demoOfFinalSystemClassMocking() throws Exception {     
  15.         PowerMock.mockStatic(System.class);     
  16.       
  17.         EasyMock.expect(System.getProperty("property")).andReturn("my property");     
  18.       
  19.         PowerMock.replayAll();     
  20.       
  21.         Assert.assertEquals("my property",     
  22.                                   new SystemPropertyMockDemo().getSystemProperty());     
  23.       
  24.         PowerMock.verifyAll();     
  25.     }     
  26. }    

测试用例里面增加了PrepareForTest注解,表明要测试的类,里面包含静态方法的调用  。

然后在测试类里面指定要测试的静态类和它的方法  。

实际上PowerMock是在EasyMock上面做了扩展,这些写法都是和EasyMock相同的  。

今天先写这么一个简单的例子,然后以后会将用到的都写上来  。

当然了,更多的可以参考:

http://code.google.com/p/powermock/

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

Xml代码

  1. <dependency>    
  2.           <groupId>org.powermock</< span>groupId>    
  3.           <artifactId>powermock-module-junit4</< span>artifactId>    
  4.           <version>1.4.8</< span>version>    
  5.           <scope>test</< span>scope>    
  6.        </< span>dependency>    
  7.        <dependency>    
  8.           <groupId>org.powermock</< span>groupId>    
  9.           <artifactId>powermock-api-easymock</< span>artifactId>    
  10.           <version>1.4.8</< span>version>    
  11.           <scope>test</< span>scope>    
  12.        </< span>dependency>    

Java单元测试之模拟利器-使用PowerMock进行Mock测试

原文:http://www.w2bc.com/article/111452 简介 mock是模拟对象,用于模拟真实对象的行为。 Powermock主要用于打桩。比如:方法A的参数需要传入...
  • xjj1314
  • xjj1314
  • 2016年11月23日 20:53
  • 1158

【测试方法】使用PowerMock进行静态方法测试

简介一般来说,Java中的静态方法无法用传统的Jmock进行单测,这也就给研发人员和测试人员造成了一定的困扰。本文介绍一种使用PowerMock执行静态方法单元测试的手段,其实网上也有使用如Mocki...
  • hbmovie
  • hbmovie
  • 2017年07月21日 16:06
  • 60

使用powerMock和mockito模拟静态方法和私有方法

首先我们要导入相应的包 org.powermock powermock-api-mockito 1.4.12 test o...
  • ynwso
  • ynwso
  • 2014年02月17日 17:13
  • 17010

powermock eclipse 'no last call on a mock available'

come from: http://www.douban.com/note/164083610/ 插件的测试使用的是swtbot,内置junit的插件。 而mock主要类似stub的工作模式,用...
  • xymyeah
  • xymyeah
  • 2011年12月23日 16:26
  • 2882

一个牛x的mock框架--Powermock

首先,官网: http://code.google.com/p/powermock/ 先做好心理准备,这个开源工具的官网基本上没啥文字说明。但是可以下载源代码,里面有一些示例测试用例。   当...
  • cq1982
  • cq1982
  • 2015年07月08日 17:20
  • 575

一个牛x的mock框架--Powermock

转载于:http://blog.csdn.net/onlyqi/article/details/6785129 首先,官网: http://code.google.com/p/powermock/...

powermock如何阻止静态代码块和调用私有方法

在项目中进行单元测试,发现很多类都采用了静态代码块,而静态代码块在class被rongqi...

powermock 入门介绍及使用示例

转自:http://blog.csdn.net/rainbow702/article/details/51783285 相关框架 JUnit4、Mockit、Power...

使用Powermock实现单元测试,提高单元测试覆盖率

1. PowerMock介绍(本章属于普及知识,熟悉这直接跳过)     软件设计开发过程中,通常采用分模块、并行开发的模式。在开发周期中,当前模块所依赖的其他模块只有接口,没有具体实现。为了实现对...
  • highth
  • highth
  • 2015年01月07日 18:07
  • 1563
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用PowerMock来Mock静态函数
举报原因:
原因补充:

(最多只允许输入30个字)