3
我必須編寫一些單元測試,但我有模擬ResultSet
和jdbc Connection
的問題。如何在TestNG中使用Mockito模擬jdbc連接和resultSet
我有這樣的方法:
@Test
public void test3() throws SQLException, IOException {
Connection jdbcConnection = Mockito.mock(Connection.class);
ResultSet resultSet = Mockito.mock(ResultSet.class);
Mockito.when(resultSet.next()).thenReturn(true).thenReturn(true).thenReturn(true).thenReturn(false);
Mockito.when(resultSet.getString(1)).thenReturn("table_r3").thenReturn("table_r1").thenReturn("table_r2");
Mockito.when(jdbcConnection
.createStatement()
.executeQuery("SELECT name FROM tables"))
.thenReturn(resultSet);
//when
List<String> nameOfTablesList = null;
try {
nameOfTablesList = Helper.getTablesName(jdbcConnection);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//then
Assert.assertEquals(nameOfTablesList.size(), 3);
}
和錯誤的顯示行executeQuery("SELECT name FROM tables")
這聽起來像這樣:
java.lang.NullPointerException HelperTest.test3(HelperTest.java:71)
任何想法什麼問題呢?
你可能要考慮不是嘲笑的數據庫連接,但無論哪種隔離數據庫的API背後,所以你可以模擬該API,或者使用內存數據庫。 –
順便說一句:你的測試表明'Helper.getTablesName'做了什麼['DatabaseMetaData.getTables'](http://docs.oracle.com/javase/8/docs/api/java/sql/DatabaseMetaData.html#getTables- java.lang.String-java.lang.String-java.lang.String-java.lang.String:A-)用於 –