【发布时间】:2018-02-18 21:00:29
【问题描述】:
我有一个类,我使用写 url 和获取连接的旧 jdbc 方法创建了与 h2 数据库的连接,并且我正在数据库中创建一个表,这是表不是 java 对象,所以我用完了为我的方法编写测试的聪明方法 这是其中一种方法
//above would be the url and driver connection
//我还创建了一个表 app_user 公共无效添加用户(连接连接, 字符串登录,字符串密码, 字符串描述)抛出 SQLException {
System.out.println(String.format("Add user : %s", login));
String newUSer = "INSERT INTO app_user(login, password, description) VALUES (?,?,?)";
try (PreparedStatement preparedStatement = connection.prepareStatement(newUSer)) {
preparedStatement.setString(1, login);
preparedStatement.setString(2, password);
preparedStatement.setString(3, description);
// returns number of changed column
preparedStatement.executeUpdate();
}
}
我的测试方法看起来像这样,有什么办法让它不那么整洁和更简单,我试图用 mockito 模拟,但我的 app_user 表不是 App_user 类的对象,所以我写了这个
@Test
public void addUser() throws SQLException, ClassNotFoundException {
Class.forName("org.h2.Driver");
try (Connection connection = DriverManager.getConnection(URL, "sa", "")) {
String createTable =
"CREATE TABLE app_user(" +
"user_id INT NOT NULL AUTO_INCREMENT," +
"login VARCHAR (255) NOT NULL ," +
"password VARCHAR (255) NOT NULL ," +
"description VARCHAR (255) NULL," +
"PRIMARY KEY (user_id))";
try (Statement statement = connection.createStatement()) {
statement.executeUpdate(createTable);
Assert.assertNotNull(statement);
}
String addUser = "INSERT INTO app_user(login, password, description) VALUES (1234,'valentine','javaMan')";
PreparedStatement statement = connection.prepareStatement(addUser);
int rowAffected = statement.executeUpdate();
Assert.assertNotNull(rowAffected);
Assert.assertEquals(rowAffected,1);
}
但我不喜欢在我的测试中我再次创建连接的事实,注意-由于某种原因我不能将对象用作表
【问题讨论】:
标签: java unit-testing jdbc