2016-12-15 110 views
4

我有以下方法惩戒方法返回null

public ResultScanner getScanner(Scan scan) { 
    Table table = getTableInstance("Sampletable"); 
    return table.getScanner(scan); 
} 

为此,我写了下面的JUnit测试代码

Connection mockconnection = PowerMockito.mock(Connection.class); 
Table mocktable = PowerMockito.mock(Table.class); 
PowerMockito.when(mockconnection.getTable(TableName.valueOf(Mockito.anyString()))) 
    .thenReturn(mocktable); 

Scan mockedScan = PowerMockito.mock(Scan.class); 
ResultScanner mockrs = PowerMockito.mock(ResultScanner.class); 
PowerMockito.when(mocktable.getScanner(mockedScan)).thenReturn(mockrs); 

而测试方法

声明

Table table = getTableInstance("Sampletable"); 

运行正常,并给出了模拟表对象,但声明

table.getScanner(scan); 

返回null。

请查找表接口的源代码在下面的链接

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

请指引我在这?

+0

添加含单元测试 –

+0

哪来的'scan'从你的方法来完整的代码? – isah

+0

对不起,我错过了参数 – Reddevil

回答

1

更换测试用例最后一行与

PowerMockito.when(mocktable.getScanner(Mockito.any(Scan.class))).thenReturn(mockrs); 

它应该工作

+1

并用'Mockito.eq(mockedScan)'替换'Mockito.any(Scan.class)''。 OP已经知道使用过的'Scan'实例,所以他也可以用它来检查是否使用了“正确的”,而不是在'getScanner'中创建的新的(这是一个编码问题,应该导致测试失败)。 – Tom