在内存数据库中测试mysql数据库操作API使用内存数据库和maven
Posted
技术标签:
【中文标题】在内存数据库中测试mysql数据库操作API使用内存数据库和maven【英文标题】:In memory Database to test mysql database operation API using in memory database with maven 【发布时间】:2013-08-19 14:28:30 【问题描述】:我必须使用 JUnit 测试用例测试一些 api。实际上我有一些简单的 JDBC 数据库连接和 API 代码来从 mysql 数据库中检索数据。 但是我需要一个内存数据库来测试代码的正确性。我正在使用 Maven。 任何机构都可以给我适当的建议与步骤。如果可能,请提供一些示例 JUnit 代码进行测试。
谢谢, RK
【问题讨论】:
如果您的 SQL 代码是通用的并且可以跨其他数据库运行,您可以查看 derby-maven-plugin 以及我对这篇 SO 帖子的回答:***.com/questions/14731178/…。 【参考方案1】:您可以使用内存数据库中的HSQLDB 100% JDBC API 兼容。
要从对象生成 JSON 字符串,您可以使用 Jacson。所以从 jdbc 结果集中创建你的对象然后是 JSON 字符串。
【讨论】:
public JSONObject getResultById(int id) Connection conn = null;语句 stmt = null; String sqlQuery = "select * from " + table + " where id='" + id + "'"; try //获取连接 conn = DBConnection.getConnection(); stmt = conn.createStatement();结果集 rs = stmt.executeQuery(sqlQuery); //以JSON格式返回结果集 return getJsonString(rs); 捕捉(异常前) 返回空值; 最后 尝试 if (conn != null) conn.close(); if (stmt != null) stmt.close(); 捕捉(异常前) 返回空值; @user1321939,我没有收到您的评论。有什么问题吗?【参考方案2】:看看 DBUnit - 他们的操作方法在 http://dbunit.sourceforge.net/howto.html
它完全符合您的要求。
DBunit 网站有很多示例。我要做的是:
在@Before 方法中设置d/b,这样每个测试都会得到一个干净的fixture。 @Before 方法的一个例子是:
Connection conn = dataSource.getConnection();
try
IDatabaseConnection connection = new DatabaseConnection(conn);
DatabaseConfig config = connection.getConfig();
config.setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY,
new HsqldbDataTypeFactory());
DatabaseOperation.CLEAN_INSERT.execute(connection, loadDutyData());
DatabaseOperation.CLEAN_INSERT
.execute(connection, loadHelperData());
finally
DataSourceUtils.releaseConnection(conn, dataSource);
loadHelperData() 方法执行以下操作:
DataFileLoader loader = new FlatXmlDataFileLoader();
IDataSet ds = loader.load(TEST_DATA_FILE_HELPER);
return ds;
load 方法只需要一个代表数据库的 xml 文件。有关更多信息,请参阅 DBUnit 文档。
【讨论】:
用一个例子更新了答案【参考方案3】:我喜欢在这里添加一些代码:
public JSONObject getResultById(int id)
Connection conn = null;
Statement stmt = null;
String sqlQuery = "select * from " + table + " where id='"
+ id + "'";
try
//get the connection
conn = DBConnection.getConnection();
stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sqlQuery);
//return result set in JSON format
return getJsonString(rs);
catch (Exception ex)
return null;
finally
try
if (conn != null)
conn.close();
if (stmt != null)
stmt.close();
catch (Exception ex)
return null;
要对此进行测试,测试它的最佳方法是什么。我有人给出了一些示例 JUnit 测试用例,那么它将非常有帮助
【讨论】:
以上是关于在内存数据库中测试mysql数据库操作API使用内存数据库和maven的主要内容,如果未能解决你的问题,请参考以下文章