我正在设置模拟类的静态方法。我必须在 @Before
注释的 JUnit 设置方法中执行此操作。
我的目标是设置类来调用真正的方法,除了那些我明确模拟的方法。
基本上:
@Before
public void setupStaticUtil() {
PowerMockito.mockStatic(StaticUtilClass.class);
// mock out certain methods...
when(StaticUtilClass.someStaticMethod(anyString())).thenReturn(5);
// Now have all OTHER methods call the real implementation??? How do I do this?
}
我遇到的问题是在 StaticUtilClass
方法 public static int someStaticMethod(String s)
不幸地抛出了一个 RuntimeException
如果提供 null
值。
所以我不能简单地将调用真实方法作为默认答案的明显路线如下:
@Before
public void setupStaticUtil() {
PowerMockito.mockStatic(StaticUtilClass.class, CALLS_REAL_METHODS); // Default to calling real static methods
// The below call to someStaticMethod() will throw a RuntimeException, as the arg is null!
// Even though I don't actually want to call the method, I just want to setup a mock result
when(StaticUtilClass.someStaticMethod(antString())).thenReturn(5);
}
我需要设置默认答案以在所有其他静态方法上调用真实方法之后我模拟了我感兴趣的方法的结果。
这可能吗?
最佳答案
你在找什么叫做partial mocking。
在 PowerMock 中你可以使用 mockStaticPartial 方法。
在 PowerMockito 中,您可以使用 stub ,它只会 stub 定义的方法,而其他保持不变:
PowerMockito.stub(PowerMockito.method(StaticUtilClass.class, "someStaticMethod")).toReturn(5);
也别忘了
@PrepareForTest(StaticUtilClass.class)
关于java - PowerMock,模拟一个静态方法,然后在所有其他静态上调用真实方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14651138/