0 0

PowerMock mock 静态方法的问题0

我的问题是,一个类A中有静态方法,这个方法被另外一个类B的一个方法调用,那么我们如何在类B中实现mock A的静态方法的返回值?代码如下,method2总是过不去,因为mock的A的静态方法返回值在testB里面没有生效。
package com.od.junit.test.powermock;

import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
class A{
    public A(){}
    public static int static_return_method() {
        return 1;
    }
}

class B{
   public B(){}
   public int testB(){
      return A.static_return_method();
   }  
}

@RunWith(PowerMockRunner.class)
@PrepareForTest({ A.class})
public class C{

@Test
   public void method() throws Exception {
       PowerMockito.mockStatic(A.class);
       PowerMockito.when(A.static_return_method()).thenReturn(2);
       Assert.assertEquals(2, A.static_return_method());
   }

@Test
   public void method2() throws Exception {
       PowerMockito.mockStatic(A.class);
       PowerMockito.when(A.static_return_method()).thenReturn(2);
       Assert.assertEquals(2, A.static_return_method());

       B b = PowerMockito.mock(B.class);
       Assert.assertEquals(2,b.testB());
   }
}

2012年11月20日 11:57

3个答案 按时间排序 按投票排序

0 0


B是被测组件不需要mock,直接
B b = new B();

2012年12月04日 19:37
0 0

另外,你要测试B的testB方法,怎么能mock B呢?你这个写法b.testB()返回的是0,因为b是mock对象。

这样写你对A的静态方法的mock就生效了。
B b = new B();
Assert.assertEquals(2, b.testB());

2012年11月28日 11:20
0 0

@PrepareForTest({ A.class, B.class,}) 试试

2012年11月28日 11:15

相关推荐

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

    本文将详细介绍如何利用PowerMock来模拟静态方法和私有方法,以便进行有效的单元测试。 PowerMock是一个强大的Java单元测试框架,它可以扩展其他流行的测试框架,如JUnit和TestNG。它的核心功能之一就是能够模拟...

    使用PowerMock来Mock静态函数

    标题“使用PowerMock来Mock静态函数”指的是如何利用PowerMock库来对Java中的静态方法进行模拟测试。静态方法由于其非实例化特性,通常难以通过常规的单元测试方式进行隔离和测试,因为它们不依赖于对象的状态。...

    powermock单元测试

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

    powermock依赖jar文件.rar

    1. **PowerMock**:这是核心概念,是一个Java单元测试框架,可以模拟那些通常无法被Mock的对象,如静态方法、final类等。 2. **Jar**:Java Archive,是Java平台的标准归档格式,包含了Java类和资源文件。在这个...

    汪文君powermock实战教学

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

    PowerMock实战手册

    PowerMock允许我们创建mock的静态方法,从而在测试中控制它们的行为。 2. **mock final类和方法**:final类和方法不能被子类化,也就无法常规地mock。PowerMock可以通过字节码操作来模拟它们。 3. **避免依赖初始...

    powermock

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

    PowerMock实战

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

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

    1. **Mocking静态方法**:在某些情况下,静态方法可能对系统行为有直接影响,PowerMock允许我们mock这些静态方法,从而隔离被测试代码。 2. **构造函数mock**:对于那些不允许实例化或包含复杂初始化逻辑的对象,...

    PowerMock.zip

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

    PowerMock实战手册.pdf

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

    powermock-easymock-junit-1.6.1.zip

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

    powerMock的测试样例集合

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

    EasyMock and PowerMock入门PPT

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

    powermock:单体测试mock工具

    单体测试工具,优点是能mock静态、final、私有方法等其他mock工具不具备的特点 1.重要注解一 @RunWith(PowerMockRunner.class) 2.重要注解二 @PrepareForTest({YourClass}) 3.包括实例有普通Mock,Mock方法内部new...

    powermock-mockito-junit-1.6.2.zip

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

    powermock-mockito-junit-1.6.3.zip 当前最新版

    在某些场景下,例如当你的代码依赖于静态方法或静态初始化块时,PowerMock 可以帮助你创建隔离的测试环境,以便更好地控制测试流程。 Mockito 是一个流行的Java Mocking框架,它使得开发者能够创建和配置模拟对象,...

Global site tag (gtag.js) - Google Analytics