gpt4 book ai didi

java - 如何在 TestNG 中使用 Mockito 模拟 jdbc 连接和 resultSet

转载 作者:行者123 更新时间:2023-12-01 19:28:52 25 4
gpt4 key购买 nike

我必须编写一些单元测试,但我在模拟 ResultSet 和 jdbc Connection 时遇到问题。

我有这个方法:

@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 table") 行中,听起来像这样:

java.lang.NullPointerException HelperTest.test3(HelperTest.java:71)

有什么想法出了什么问题吗?

最佳答案

您需要在 jdbcConnection.createStatement() 上创建一个期望

默认情况下,我相信会返回 null

应该读成这样:

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");

Statement statement = Mockito.mock(Statement.class);
Mockito.when(statement.executeQuery("SELECT name FROM tables")).thenReturn(resultSet);

Connection jdbcConnection = Mockito.mock(Connection.class);
Mockito.when(jdbcConnection.createStatement()).thenReturn(statement);

关于java - 如何在 TestNG 中使用 Mockito 模拟 jdbc 连接和 resultSet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34919664/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com