`

使用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 {
	@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模拟静态方法和私有方法的示例

    本示例程序利用PowerMock演示了如何对静态方法和私有方法进行单元测试(其它模拟单元测试技术无法实现)。

    powermock单元测试

    powermock1.4.9.jar和powermock测试静态方法和私有方法的测试代码,大家都知道easymock不能测试这些,配合使用和单元测试更加完善。

    Instant Mock Testing with PowerMock.pdf

    Instant Mock Testing with PowerMock 7 Saying Hello World! (Simple) 8 Getting and installing PowerMock (Simple) 14 Mocking static methods (Simple) 22 Verifying method invocation (Simple) 28 Mocking ...

    Instant_Mock_Testing_with_PowerMock

    tesunit junit easymock PowerMock

    powermock

    powermock powermock powermock powermock

    powermock源码学习 支持模拟静态方法、构造函数、final类和方法、私有方法以及移除静态初始化器的模拟工具

    例如,在进行单元测试时,有时候我们并不希望测试数据进入实际的数据库,那么这个时候,就可以借助PowerMock来拦截真实的数据库操作,并返回我们预设的参数。 此外,PowerMock还支持模拟普通方法、私有方法、静态...

    汪文君powermock实战教学

    Powermock是基于现有的mock框架,easymock和mockito而建立的一个非常强大的框架,它具备easymock和mockito所不具备的一些功能,该系列教材详细的说明了如何使用powermock的所有特性

    PowerMock实战

    全面介绍PowerMock的使用,帮助初学者彻底了解PowerMock的使用,提高代码的健壮性

    powermock依赖jar文件.rar

    网上找了好多powermock的例子都不好用,一怒之下亲自挨个引入测试,最终得到这些jar,给需要的朋友,自己也留个备份。

    powermock-cover.zip

    使用powermock+jacoco,测试静态方法,测试覆盖率。环境是:IDEA+maven。 直接执行:mvn clean install,然后查看覆盖率:powermock-cover\target\site\jacoco\index.html

    powermock:单体测试mock工具

    3.包括实例有普通Mock,Mock方法内部new出来的对象,Mock普通对象的final方法,Mock普通类的静态方法,Mock 私有方法 版本库地址 HTTPS协议: https://github.com/ichunming/powermock.git SSH协议: git@github....

    power mockito学习资料

    PowerMock使用一个自定义类加载器和字节码操作来模拟静态方法,构造函数,final类和方法,私有方法,去除静态初始化器等等。通过使用自定义的类加载器,简化采用的IDE或持续集成服务器不需要做任何改变。熟悉...

    单元测试模拟框架PowerMock.zip

    通过提供定制的类加载器以及一些字节码篡改技巧的应用,PowerMock 现了对静态方法、构造方法、私有方法以及 Final 方法的模拟支持,对静态初始化过程的移除等强大的功能。因为 PowerMock 在扩展功能时完全采用和被...

    EasyMock and PowerMock入门PPT

    什么时候需要Mock对象 什么是EasyMock EasyMock的优点和缺点 运行EasyMock需要的资源 EasyMock的基本使用步骤 什么是PowerMock 运行PowerMock需要的资源 PowerMock的扩展功能

    powermock-mockito-demo:使用springboot的powermock-mockito-demo

    使用在springboot项目中使用powermock-mockito进行单元测试,演示mock static、private、whenNew、exception的测试。 注意 示例使用spring-boot 2.0.3.RELEASE 它间接引用 junit-4.12 mockito-core-2.15.0 但是官网...

    powerMock的测试样例集合

    学习powermock实战手册,自己写的若干例子,mock static、final ,mock 局部变量、成员变量、Answer接口、ArgumentMatcher

    PowerMock实战手册

    PowerMock实战手册。采用的是Junit+PowerMock+Mockito这样的组合来进行讲述。

    powermock-api-support-2.0.9-API文档-中英对照版.zip

    赠送jar包:powermock-api-support-2.0.9.jar; 赠送原API文档:powermock-api-support-2.0.9-javadoc.jar; 赠送源代码:powermock-api-support-2.0.9-sources.jar; 赠送Maven依赖信息文件:powermock-api-support...

Global site tag (gtag.js) - Google Analytics