使用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. }    

 

测试用例里面增加

你可能感兴趣的:(Powermock)