`
neverforget
  • 浏览: 38506 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

使用PowerMock来Mock静态函数

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

第一个注解是指定Runner

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

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

Java代码

import java.io.IOException;    
   
public class SystemPropertyMockDemo {    
    public String getSystemProperty() throws IOException {    
        return System.getProperty("property");    
    }    
}
Java代码

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依赖如下,我在使用的时候就弄错了

Xml代码

<dependency>   
          <groupId>org.powermockgroupId>   
          <artifactId>powermock-module-junit4artifactId>   
          <version>1.4.8version>   
          <scope>testscope>   
       dependency>   
       <dependency>   
          <groupId>org.powermockgroupId>   
          <artifactId>powermock-api-easymockartifactId>   
          <version>1.4.8version>   
          <scope>testscope>   
       dependency>

06:00-10:00销售当天第一期,10:00统一开奖。10:00-22:00(10分钟一期,共72期),22:00-02:00(5分钟一期,共48期),02:00-06:00暂停销售,全天共计120期。
分享到:
评论

相关推荐

    利用PowerMock模拟静态方法和私有方法的示例

    PowerMock允许我们使用`@PrepareForTest`注解指定需要模拟的类,并通过`PowerMockito.mockStatic`或`Mockito.when`来模拟私有方法。 下面是一段使用PowerMock模拟静态方法和私有方法的示例代码: ```java import ...

    powermock单元测试

    3. **模拟静态方法**:使用`PowerMockito.mockStatic(Class&lt;?&gt; clazz)`来模拟静态方法。然后通过`when`和`thenReturn`(或其他方法)来定义静态方法的行为。 4. **模拟私有方法**:首先,需要使用`PowerMockito.spy...

    汪文君powermock实战教学

    4. **Mock静态方法**:静态方法通常难以被测试,因为它们没有实例。PowerMock可以模拟静态方法,使得测试能够覆盖到这部分代码。 5. **Mock final修饰的类**:final类或方法是不可变的,不能被常规手段mock。...

    powermock依赖jar文件.rar

    PowerMock是一个强大的Java单元测试框架,它扩展了如Mockito这样的工具,允许开发者模拟静态方法、构造函数、final类和方法、私有方法以及删除静态初始化器。在Java开发中,有时我们需要对不可Mock的对象进行单元...

    PowerMock实战手册

    PowerMock作为一款强大的单元测试工具,可以模拟静态方法、构造函数、final类和方法、删除静态初始化器等,使得原本难以测试的代码变得可测。 首先,让我们深入了解PowerMock。PowerMock是一个扩展了其他mocking...

    powermock

    PowerMock 提供了 `PowerMockito.mockStatic` 方法,允许我们指定静态方法的行为,从而在测试中隔离静态方法的依赖。 3. **构造函数模拟**: 有些情况下,被测试类可能依赖于私有构造函数或不可实例化的类。...

    PowerMock+Mockito-junit测试套件1.6.3版本

    PowerMock是一个扩展了其他Mocking框架(如EasyMock和Mockito)的库,它允许开发者对静态方法、构造函数、final类和方法、私有方法以及删除静态初始化器进行模拟和mock。在传统测试框架中,这些通常是难以或无法测试...

    PowerMock实战手册.pdf

    @RunWith注解用于指定运行测试的规则,@PrepareForTest用于指示哪些类需要在测试时被准备好,以便可以mock静态方法。 ### MockStatic 当需要模拟静态方法的调用时,PowerMock提供了模拟静态方法的能力。 #### ...

    PowerMock实战

    在后续章节中,将会进一步深入讲解PowerMock的高级特性,比如如何模拟局部变量(MockLocalVariable),如何模拟静态方法(MockStatic)以及如何使用验证(Verifying)。此外,本书还介绍了如何模拟私有方法、构造...

    PowerMock.zip

    PowerMock 是一个强大的Java单元测试框架的扩展,它允许开发者模拟静态方法、构造函数、final 类、enum 和私有方法,这些都是传统单元测试工具如JUnit和EasyMock无法处理的。这个压缩包“PowerMock.zip”可能包含...

    powermock实战手册

    3. **模拟对象**:使用`PowerMockito.mockStatic`或`PowerMockito.mock`来模拟静态方法或类。 4. **配置模拟行为**:使用`when()`方法指定模拟对象的行为,`thenReturn()`、`thenThrow()`等方法定义返回值或异常。 ...

    powermock-mockito-junit-1.6.2.zip

    PowerMock是一个强大的扩展库,它允许开发者模拟静态方法、构造函数、final类和方法、私有方法、删除静态初始化器等,这些都是标准的Java mocking框架如Mockito无法做到的。PowerMock通过字节码操作(Bytecode ...

    powerMock的测试样例集合

    PowerMock是一个强大的Java单元测试框架,它扩展了其他如EasyMock等工具的功能,允许开发者对静态方法、构造函数、final类和方法、私有方法以及删除静态初始化器进行模拟和测试。在“powerMock的测试样例集合”中,...

    powermock-easymock-junit-1.6.1.zip

    PowerMock是基于EasyMock的一个扩展,它允许模拟静态方法、构造函数、final类和方法、私有方法以及删除静态初始化器。在"powermock-easymock-junit-1.6.1.zip"这个压缩包中,包含了这些工具的特定版本。 首先,我们...

    EasyMock and PowerMock入门PPT

    PowerMock是EasyMock的一个扩展,它允许模拟静态方法、构造函数、final类和方法,以及删除静态初始化器。这对于那些不能直接用EasyMock模拟的场景非常有用,例如模拟Java的`java.lang`包中的类。 **运行PowerMock...

    powermock-easymock-junit-1.5.4.zip

    3. 使用PowerMock创建需要模拟的对象,例如`PowerMockito.mockStatic(YourClass.class)`。 4. 使用EasyMock或Mockito定义模拟对象的行为和期望。 5. 使用JUnit的@Test注解编写测试用例,运行测试。 总的来说,...

    PowerMock\EasyMock的相关资料和文档

    EasyMock是基础,而PowerMock则在其基础上扩展了更多的功能,使得一些难以模拟的Java特性如静态方法、构造函数、final类和方法、删除静态初始化器等变得可测试。 EasyMock是一个强大的模拟框架,它允许开发者创建...

Global site tag (gtag.js) - Google Analytics