gpt4 book ai didi

java - 使用 PowerMockito 模拟接口(interface)

转载 作者:行者123 更新时间:2023-11-30 02:42:44 28 4
gpt4 key购买 nike

我需要模拟 hbase api 中的一个方法。请找到下面的方法

 public static Connection createConnection() throws IOException {
return createConnection(HBaseConfiguration.create(), null, null);
}

请在下面的链接中找到Connection接口(interface)的源代码

http://grepcode.com/file/repo1.maven.org/maven2/org.apache.hbase/hbase-client/1.1.1/org/apache/hadoop/hbase/client/Connection.java

我尝试过如下

Connection mockconnection = PowerMockito.mock(Connection.class);
PowerMockito.when(ConnectionFactory.createConnection()).thenReturn(mockconnection);

这是正确的模拟形式吗,因为它无法正常工作

最佳答案

要模拟静态方法,您需要:

  1. 在类或方法级别添加@PrepareForTest

示例:

@PrepareForTest(Static.class) // Static.class contains static methods
  • 调用 PowerMockito.mockStatic(class) 来模拟静态类(使用 PowerMockito.spy(class) 来模拟特定方法):
  • 示例:

    PowerMockito.mockStatic(Static.class);
  • 只需使用 Mockito.when() 来设置您的期望:
  • 示例:

    Mockito.when(Static.firstStaticMethod(param)).thenReturn(value);
    <小时/>

    所以在你的情况下,它会是这样的:

    @RunWith(PowerMockRunner.class)
    public class ConnectionFactoryTest {

    @Test
    @PrepareForTest(ConnectionFactory.class)
    public void testConnection() throws IOException {
    Connection mockconnection = PowerMockito.mock(Connection.class);
    PowerMockito.mockStatic(ConnectionFactory.class);
    PowerMockito.when(ConnectionFactory.createConnection()).thenReturn(mockconnection);

    // Do something here
    }
    }

    有关 how to mock a static method 的更多详细信息

    关于java - 使用 PowerMockito 模拟接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41158717/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com