首页 > Java > java教程 > 正文

如何使用 PowerMockito 模拟单个静态方法并返回对象?

Susan Sarandon
发布: 2024-11-27 16:52:12
原创
578 人浏览过

How to Mock a Single Static Method and Return an Object Using PowerMockito?

使用 PowerMockito 模拟单个静态方法并返回对象

在这种情况下,您的目标是模拟静态方法 m1,来自包含两个静态方法 m1 和 m2 的类。目标是 m1 在调用时返回一个对象。

为了实现此目标,您最初尝试使用 PowerMockito.mockStatic 和自定义 Answer 来设置 m1 的返回值。但是,这种方法会导致类型不匹配错误,因为它同时调用了 m1 和 m2,而它们的返回类型不同。

您还尝试使用 PowerMockito.when 直接指定 m1 的返回值。然而,当随后调用 m1 时,这并没有生效。

正确的策略是使用 1 个参数版本的 mockStatic 来启用静态模拟,并使用 when-thenReturn 语法来指定返回值有针对性的方法。具体方法如下:

import static org.mockito.Mockito.*;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;

class ClassWithStatics {
  public static String getString() {
    return "String";
  }

  public static int getInt() {
    return 1;
  }
}

@RunWith(PowerMockRunner.class)
@PrepareForTest(ClassWithStatics.class)
public class StubJustOneStatic {
  @Test
  public void test() {
    PowerMockito.mockStatic(ClassWithStatics.class);

    when(ClassWithStatics.getString()).thenReturn("Hello!");

    System.out.println("String: " + ClassWithStatics.getString());
    System.out.println("Int: " + ClassWithStatics.getInt());
  }
}
登录后复制

在此示例中,ClassWithStatics 包含两个静态方法:getString 和 getInt。测试类 StubJustOneStatic 使用 PowerMockito 为 ClassWithStatics 启用静态模拟,然后将 getString 的返回值存根为“Hello!”使用when-thenReturn。 getInt 的默认行为被保留,因此它继续返回 1。

以上是如何使用 PowerMockito 模拟单个静态方法并返回对象?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板