Java 如何用Junit测试jdbc方法?

Java 如何用Junit测试jdbc方法?,java,testing,jdbc,mockito,junit5,Java,Testing,Jdbc,Mockito,Junit5,我想用Mockito框架在Junit5中测试我的方法。但我是编程初学者,不知道该如何正确地进行编程 这是我要测试的功能: public boolean sprawdzIlosc(){ try { String sumujProdukty ="SELECT SUM(ilosc) AS podliczenie FROM produkty"; connection = ConnectionManager.connectionOthers();

我想用Mockito框架在Junit5中测试我的方法。但我是编程初学者,不知道该如何正确地进行编程

这是我要测试的功能:

 public boolean sprawdzIlosc(){
    try {
        String sumujProdukty ="SELECT SUM(ilosc) AS podliczenie FROM produkty";

        connection = ConnectionManager.connectionOthers();
        if (connection == null) {
            throw new RuntimeException("Brak połączenia z bazą danych");
        }
        statement = connection.createStatement();
        resultSet = statement.executeQuery(sumujProdukty);
        if(resultSet.next()) {
            ilosc = resultSet.getInt(1);
            return true;
        }
    } catch (SQLException e) {
        e.printStackTrace();
        throw new RuntimeException("Wyjątek związany z błędną składnią SQL");
    }
    finally {
        if (resultSet != null) {
            try {
                resultSet.close();
            } catch (SQLException e) { /* */}
        }
        if (statement != null) {
            try {
                statement.close();
            } catch (SQLException e) { /* */}
        }
        if (connection != null) {
            try {
                connection.close();
            } catch (SQLException e) { /* */}
        }
    }
    return false;
}
这是对我的功能的测试,它不能正常工作:

class ProductDaoTest {
@Mock
private ProductDao productDao;
@Mock
private DataSource dataSource;

@Mock
private Connection connection;

@Mock
private Statement statement;

@Mock
private ResultSet resultSet;

private ProductBean produkt;

@Before
public void setUp() throws SQLException {
    assertNotNull(dataSource);
    when(dataSource.getConnection()).thenReturn(connection);
    when(connection.createStatement()).thenReturn(statement);
    when(statement.executeQuery("SELECT SUM(ilosc) AS podliczenie FROM produkty")).thenReturn(resultSet);
    when(resultSet.next()).thenReturn(true);
}
@Test
public void testSprawdzIlosc(){
assertTrue(productDao.sprawdzIlosc());
    }

我需要一些关于如何使用数据库测试函数的建议。提前感谢。

另一种方法是使用内存中的数据库(如HSQLDB)进行测试。为此,您需要使用数据库进行测试。SpringBoot附带h2设置,使编写测试变得简单。还有一个名为dbunit的项目,它帮助设置和验证单元测试数据。像这样模拟jdbc对象将需要大量的工作,而且没有任何值得做的事情。顺便说一句,将jdbc对象放在实例范围内是个坏主意。它们应该是方法中的局部变量。否则,当不同线程同时访问该方法时,您将遇到问题。不要模拟JDBC。这很难做到正确,而且您可能需要测试更多的代码,以确定是否正确地模拟了JDBC,然后测试您想要测试的代码。要么连接到一个真实的数据库(例如使用测试容器java),要么考虑不要在单元测试中测试这个部分。