首页 > 解决方案 > 如何使用原生 JDBC SQL 查询为 DAO 层编写单元测试用例?

问题描述

我想为以下代码编写单元测试用例。这些测试也将运行,同时部署和代码覆盖率将显示在仪表板上,因此无法使用本地数据库模拟。

QCConstants.selectQuery => 选择查询字符串

QCConstants.updateQuery => 插入/删除查询字符串

    public List<SomeModel> getData() {
        Connection conn;
        try {
            conn = SQLDBConfig.getConnection();
            PreparedStatement ps;
            ResultSet rs;
            ps = conn.prepareStatement(QCConstants.updateQuery);
            ps.executeUpdate();
            ps = conn.prepareStatement(QCConstants.selectQuery)
            rs = ps.executeQuery();
            List<SomeModel> list = new ArrayList();
            while (rs.next()) {
                SomeModel someModel = new SomeModel();
                someModel.set_someId(rs.getInt(1));
                someModel.set_someName(rs.getString(2));
                someModel.set_someDesc(rs.getString(3));
                list.add(someModel);
            }
            return list;
        } catch (Exception e){
            log.error("Exception occurred " + e.getMessage());
            return null;
        }
    }

标签: javaspringspring-bootunit-testingjdbc

解决方案


测试所有/某些代码是不可能或不可取的,原因是质量需要花钱,它不是免费的。当然,质量差的代码也是要花钱的。正确的平衡取决于许多因素(例如,糟糕的程序员编写测试比不编写测试的优秀程序员更糟糕)并且通常是主观的。

我之所以这么说,是因为您的问题的具体解决方案(采取的正确方法)在很大程度上取决于这种主观平衡。

在您的情况下,最好的方法是解耦后端(例如使用一些 ORM,如 Spring Boot)并创建一个 Derby 或类似的本地模式来填充数据,import.sql仅用于测试,它可以在您的 CI/CD 服务器上运行而不会出现问题。

在这里写的问题太长了,但这里要使用两个主要问题:


推荐阅读