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-)用于 –