2016-12-15 108 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