【问题标题】:How to mock nested static methods using PowerMockito?如何使用 PowerMockito 模拟嵌套的静态方法?
【发布时间】:2019-03-09 13:03:18
【问题描述】:

如何使用 PowerMockito 模拟嵌套的静态方法? 下面是一个非常简单的例子,说明我想如何使用它。

类:

public class SomeClass {
    public static String someMethodA(){
        //some very important codes here
        return someMethodB();
    }
    private static String someMethodB(){
        return someMethodC();
    }
    private static String someMethodC(){
        return "Some Text";
    }
}

已经尝试了以下方法,但没有成功:

PowerMockito.mockStatic(SomeClass.class);
PowerMockito.stub(PowerMockito.method(SomeClass.class, "someMethodB")).toReturn("Some Other Text");

我想按原样运行 someMethodA(),这就是为什么我想改为存根 someMethodB()。无论如何我可以做到这一点吗?希望有一种无需修改访问修饰符的方法,因为我正在使用的代码是遗留代码。

【问题讨论】:

  • 嗨朋友,你的意思是你想单元测试someMethodA,这是私有的模拟someMethodB?或者如果someMethodA也是公开的,那可以吗?。
  • 嗨普拉文。是的。将 someMethodA 编辑为公开。没关系。

标签: java methods static mockito powermockito


【解决方案1】:

您可以spy 私有静态方法。

JUnit4测试

import static org.junit.Assert.assertEquals;
import static org.powermock.api.mockito.PowerMockito.spy;
import static org.powermock.api.mockito.PowerMockito.when;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;

@RunWith(PowerMockRunner.class)
@PrepareForTest(SomeClass.class)
public class SomeClassTest {

    @Test
    public void test() throws Exception {
        spy(SomeClass.class);
        when(SomeClass.class, "someMethodB").thenReturn("Some Other Text");
        assertEquals("Some Other Text", SomeClass.someMethodA());
    }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-24
    • 2017-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多