java - 如何使用原生 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;
}
}
解决方案
测试所有/某些代码是不可能或不可取的,原因是质量需要花钱,它不是免费的。当然,质量差的代码也是要花钱的。正确的平衡取决于许多因素(例如,糟糕的程序员编写测试比不编写测试的优秀程序员更糟糕)并且通常是主观的。
我之所以这么说,是因为您的问题的具体解决方案(采取的正确方法)在很大程度上取决于这种主观平衡。
在您的情况下,最好的方法是解耦后端(例如使用一些 ORM,如 Spring Boot)并创建一个 Derby 或类似的本地模式来填充数据,import.sql
仅用于测试,它可以在您的 CI/CD 服务器上运行而不会出现问题。
在这里写的问题太长了,但这里要使用两个主要问题:
推荐阅读
- neo4j - 由于 _id 上的约束违反,无法复制节点
- r - 基于输入选择的闪亮交互式地图显示颜色
- javascript - 在刀片中使用 php 参数调用 vue js 函数
- docker - 使用 Docker 运行 Spark 集群的最佳方式
- java - 如何在 vscode 中克隆终端?
- android - How to know the origin of an event in Firestore?
- vb.net - 在不使用计时器的情况下收听或等待特定时间
- labelimg - 如何解决“ModuleNotFoundError: No module named 'PyQt5'”?
- php - 递归函数不返回任何内容
- java - 用于将图像转换为 jpeg 并对其进行压缩的 Java 类 - 输入和输出参数是一个包含图像本身的 blob