使用PowerMock来Mock静态函数

开发 后端
EasyMock和Mockito等框架,对static, final, private方法均是不能mock的。

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.powermockgroupId>    
  3.           <artifactId>powermock-module-junit4artifactId>    
  4.           <version>1.4.8version>    
  5.           <scope>testscope>    
  6.        dependency>    
  7.        <dependency>    
  8.           <groupId>org.powermockgroupId>    
  9.           <artifactId>powermock-api-easymockartifactId>    
  10.           <version>1.4.8version>    
  11.           <scope>testscope>    
  12.        dependency>    

 

【编辑推荐】

  1. Spring框架的7个模块
  2. 简述Spring JDBC的学习
  3. Spring 2.0和Spring AOP
  4. Spring对Quartz任务调度提供支持
  5. Spring2.0升级Spring2.0.7的变化
责任编辑:金贺 来源: JavaEye博客
相关推荐

2012-04-19 09:37:12

ibmdw

2009-08-28 11:48:32

C#静态函数

2017-03-23 16:02:10

Mock技术单元测试

2024-08-21 08:22:33

2009-08-26 10:40:39

C# Static H

2021-05-05 11:38:40

TestNGPowerMock单元测试

2023-04-11 08:02:26

单测技术JUnit框架

2009-12-14 09:57:04

Lambda表达式

2022-04-07 08:00:00

Javascript开发

2021-03-11 12:33:50

JavaPowerMock技巧

2024-07-29 12:12:59

2009-07-31 15:44:02

C#静态构造函数

2009-07-31 15:37:45

C#静态构造函数

2009-08-20 14:28:00

C#静态构造函数

2009-10-19 14:25:16

静态构造函数

2009-08-13 18:02:11

C#静态构造函数

2010-01-21 14:28:03

C++静态成员函数

2010-01-22 11:13:16

C++静态

2010-01-27 16:10:32

C++静态构造函数

2014-07-03 09:14:52

静态路由
点赞
收藏

51CTO技术栈公众号