当前位置:首页 > 开发 > 编程语言 > 编程 > 正文

使用PowerMock来Mock静态函数

发表于: 2011-03-31   作者:asialee   来源:转载   浏览次数:
摘要:       EasyMock和Mockito等框架,对static, final, private方法均是不能mock的。 这些框架普遍是通过创建Proxy的方式来实现的mock。 而PowerMock是使用CGLib来操纵字节码而实现的mock,所以它能实现对上面方法的mock。今天先来看一个简单的例子吧: 第一个注解是指定Runner 第二个
      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>  	

使用PowerMock来Mock静态函数

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
通过Rino Mock来模拟接口并返回数据,验证客户端数据处理的正确性。 1 [TestMethod] 2 public void
环境:win7 jdk1.6 java 架构:idea maven springMVC mock是与搭配junit使用的一款工具软件。mock的
在使用Visual studio 2012 的Fake framework 做单元测试的时候,你会发现有一些函数没有生产Stub 或
在之前的一篇日志中,我简单总结了调用Understand的Perl API的方法,这里再简单总结一些经验: 在Sc
  static以前都接触过,可是最近才发现了还有静态类的写法,也可能是以前没太注意了,所以自己去
在之前的一篇日志中,我简单总结了调用Understand的Perl API的方法,这里再简单总结一些经验: 在Sc
先贴代码: DuplicateCenter { main(String[] args) { List names = Arrays.()names=ImmutableSet.(
1. 为什么使用Mockito来进行单元测试? 回答这个问题需要回答两个方面,第一个是为什么使用mock?mo
方 世明 ( fangshim@cn.ibm.com), 软件工程师, EMC 方世明就职于 IBM 中国软件开发中心存储部门,从
我们先来看看PowerMock的依赖: 可以看出来,它有两个重要的依赖:javassist和objenesis。 javassist
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号