gpt4 book ai didi

java - JUnit 5 - JDBC 语句测试

转载 作者:行者123 更新时间:2023-12-02 02:45:29 25 4
gpt4 key购买 nike

我已经开始学习单元测试。我正在使用 JUnit 5,我想测试将一些数据插入数据库的方法(使用 JDBC)。这是我的代码:

数据源.java

import java.sql.*;

public class Datasource {

public static final String CONNECTION = "jdbc:mysql://127.0.0.1:3306/java";

private Connection connection;

public boolean open() {
try {
connection = DriverManager.getConnection(CONNECTION, "root", "");
return true;

} catch (SQLException e) {
System.out.println(e.getMessage());
return false;
}
}

public boolean insertTable() {
try {
String query = "INSERT INTO artists(name) VALUES(?)";
PreparedStatement stmt = connection.prepareStatement(query);
stmt.setString(1, "Test");
int result = stmt.executeUpdate();

if (result == 1) return true;
return false;

} catch (SQLException e) {
System.out.println(e.getMessage());
return false;
}
}

}

DatasourceTest.java

import static org.junit.jupiter.api.Assertions.*;

class DatasourceTest {

private Datasource datasource;

@org.junit.jupiter.api.BeforeEach
void setUp() {
datasource = new Datasource();

if (!datasource.open()) {
System.exit(-1);
}
}

@org.junit.jupiter.api.Test
void insertTable() {

assertTrue(datasource.insertTable());

}

}

它工作正常,但它实际上将一条记录插入到我的数据库中,但我想做的是模拟它。是否可以仅使用 JUnit 来实现这一目标?如果没有,我需要什么?如果有一个简单的实现,我们将不胜感激。

编辑

我发现了一个名为Mockito的工具,它是我需要的吗?如果是这样,有人可以告诉我如何部署我的方法 insertTable() 的简单测试吗?

最佳答案

这就是我使用mockito测试insetTable方法所做的

import static org.junit.Assert.*;    
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.when;

@RunWith(MockitoJUnitRunner.class)
public class DatasourceTest {

@InjectMocks
Datasource datasource;
@Mock
Connection connection;
@Mock
PreparedStatement stmt;
@Before
public void setUp() throws SQLException {
when(connection.prepareStatement(eq("INSERT INTO artists(name) VALUES(?)"))).thenReturn(stmt);
when(stmt.executeUpdate()).thenReturn(1);

}

@Test
public void testInsertTable() {
assertTrue(datasource.insertTable());

}
}

关于java - JUnit 5 - JDBC 语句测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44626347/

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