PowerMock,模拟静态方法,然后在所有其他静态上调用真实方法 [英] PowerMock, mock a static method, THEN call real methods on all other statics

查看:1026
本文介绍了PowerMock,模拟静态方法,然后在所有其他静态上调用真实方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在设置模拟类的静态方法。我必须在 @Before -annotated JUnit设置方法中执行此操作。

I'm setting up mocking a class' static methods. I have to do this in a @Before-annotated JUnit setup method.

我的目标是设置类为我明确模拟的那些方法调用真正的方法,

My goal is to setup the class to call real methods, except for those methods I explicitly mock.

基本上:

@Before
public void setupStaticUtil() {
  PowerMockito.mockStatic(StaticUtilClass.class);

  when(StaticUtilClass.someStaticMethod(antString())).thenReturn(5); // mock out certain methods...

  // Now have all OTHER methods call the real implmentation???  How do I do this?
}

我遇到的问题是 StaticUtilClass 方法 public static int someStaticMethod(String s)很遗憾地抛出一个 RuntimeException 如果提供的话使用 null 值。

The problem I'm running into is that within StaticUtilClass the method public static int someStaticMethod(String s) unfortunately throws a RuntimeException if supplied with a null value.

所以我不能简单地将调用实际方法的明显路线作为默认值回答如下:

So I can't simply go the obvious route of calling real methods as the default answer as below:

@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); 
}

我需要设置默认的Answer来调用所有其他静态方法的实方法之后我模拟了我对模拟感兴趣的方法的结果。

I need to set the default Answer to call real methods on all other static methods after I mock the results from the method I'm interested in mocking.

这可能吗?

推荐答案

你在寻找什么称为部分嘲笑

在PowerMock中,您可以使用 mockStaticPartial 方法。

In PowerMock you can use mockStaticPartial method.

在PowerMockito中,您可以使用存根,这将只存根方法定义并保留其他不变:

In PowerMockito you can use stubbing, which will stub only the method defined and leave other unchanged:

PowerMockito.stub(PowerMockito.method(StaticUtilClass.class, "someStaticMethod")).toReturn(5);

也不要忘记

@PrepareForTest(StaticUtilClass.class)

这篇关于PowerMock,模拟静态方法,然后在所有其他静态上调用真实方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆