Java 如何用Junit测试jdbc方法?
我想用Mockito框架在Junit5中测试我的方法。但我是编程初学者,不知道该如何正确地进行编程 这是我要测试的功能: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();
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),要么考虑不要在单元测试中测试这个部分。