代码之家  ›  专栏  ›  技术社区  ›  Reddevil

使用PowerMockito模拟接口

  •  2
  • Reddevil  · 技术社区  · 8 年前

    我需要模拟hbase API中的方法。请在下面找到方法

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

    请在下面的链接中找到连接接口的源代码

    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 回复  |  直到 8 年前
        1
  •  2
  •   Nicolas Filotto    8 年前

    嘲弄 static 方法,您需要:

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

    例子:

    @PrepareForTest(Static.class) // Static.class contains static methods
    
    1. Call PowerMockito.mockStatic(class) 要模拟静态类(使用 PowerMockito.spy(class) 模拟特定方法):

    例子:

    PowerMockito.mockStatic(Static.class);
    
    1. 只是使用 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