要模拟
我需要在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/hbase-clase/hbase-client/1.1.1.1/org/apache/hadoop/hadoop/hadoop/hbase/hbase/hbase/client/client/connection.java p>我尝试过以下
Connection mockconnection = PowerMockito.mock(Connection.class);
PowerMockito.when(ConnectionFactory.createConnection()).thenReturn(mockconnection);
是这种正确的模拟形式,因为它无法正常工作
要模拟static
方法,您需要:
- 在类或方法级别添加
@PrepareForTest
。
示例:
@PrepareForTest(Static.class) // Static.class contains static methods
-
Call 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
}
}
有关的更多详细信息>如何模拟静态方法