在内存数据库中测试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的主要内容,如果未能解决你的问题,请参考以下文章

mongodb,redis,mysql 简要对比

mongodb,redis,mysql 简要对比

对于测试套件,用内存中的 HSQLDB 替换 MYSQL 不起作用

ubuntu12.04使用C API操作数据库

MySQL权限和用户管理

MySQL内存不释放分析