集成测试 DAO INSERT 语句
Integration testing DAO INSERT statement
我需要对 INSERT 语句执行集成测试。
基本上,我想要一个自动化测试,以确保在该查询中写入的 SQL 实际上是正确的。
我不确定如何编写此集成测试。
您需要考虑以下想法:
- 该方法执行即发即弃类型的 INSERT,因此在 IMO 中对其进行单元测试没有用。
- 我无法编写 findById 方法,因为记录没有 ID。在我的例子中,id 是无用的,因为这些记录永远不会被 id 检索到。此外,这会导致先有鸡还是先有蛋的问题,因为 findById 或 insert 语句可能是错误的。
我看到很多帖子立即开始讨论单元测试。我不想对此进行单元测试,我想编写一个集成测试来确保我的 SQL 查询是正确的。
我不是在寻找特定的代码,我是在寻找正确的概念方法来测试我在代码中执行的 sql 查询(在我的例子中它恰好是 Java)。
你能给我一些建议吗?
代码:
public void insertPostStat(PostStat postStat) {
final String sql = "INSERT INTO post_stat(created_at, geom, google_place_id, google_place_name) " +
"VALUES(?, ST_SetSRID(ST_MakePoint(? , ? ), 4326), ?, ?";
KeyHolder holder = new GeneratedKeyHolder();
SqlParameterSource param = new MapSqlParameterSource()
.addValue("created_at", postStat.getCreatedAtMs())
.addValue("longitude", postStat.getLongitude())
.addValue("latitude", postStat.getLatitutde())
.addValue("google_place_id", postStat.getGooglePlaceId())
.addValue("google_place_name", postStat.getGooglePlaceName());
template.update(sql,param, holder);
}
通常,测试插入涉及尝试读回数据以确保它是按预期写入的。如果没有自然键,您始终可以在所有列上使用 select。如果table允许重复行,你应该先计算它们:
- 开始交易
- select 符合条件的行数。
- 在测试中调用您的方法
- select 符合条件的行数
- 回滚 tx
- 断言 count2 - count1 = 1
如果table不允许重复行:
- 开始交易
- 在测试中调用您的方法
- 读取符合条件的行
- 回滚 tx
- 断言行已读取
如果您没有事务管理器,则需要手动清理:删除 运行 插入函数前后的预期行。
我需要对 INSERT 语句执行集成测试。
基本上,我想要一个自动化测试,以确保在该查询中写入的 SQL 实际上是正确的。
我不确定如何编写此集成测试。
您需要考虑以下想法:
- 该方法执行即发即弃类型的 INSERT,因此在 IMO 中对其进行单元测试没有用。
- 我无法编写 findById 方法,因为记录没有 ID。在我的例子中,id 是无用的,因为这些记录永远不会被 id 检索到。此外,这会导致先有鸡还是先有蛋的问题,因为 findById 或 insert 语句可能是错误的。
我看到很多帖子立即开始讨论单元测试。我不想对此进行单元测试,我想编写一个集成测试来确保我的 SQL 查询是正确的。
我不是在寻找特定的代码,我是在寻找正确的概念方法来测试我在代码中执行的 sql 查询(在我的例子中它恰好是 Java)。
你能给我一些建议吗?
代码:
public void insertPostStat(PostStat postStat) {
final String sql = "INSERT INTO post_stat(created_at, geom, google_place_id, google_place_name) " +
"VALUES(?, ST_SetSRID(ST_MakePoint(? , ? ), 4326), ?, ?";
KeyHolder holder = new GeneratedKeyHolder();
SqlParameterSource param = new MapSqlParameterSource()
.addValue("created_at", postStat.getCreatedAtMs())
.addValue("longitude", postStat.getLongitude())
.addValue("latitude", postStat.getLatitutde())
.addValue("google_place_id", postStat.getGooglePlaceId())
.addValue("google_place_name", postStat.getGooglePlaceName());
template.update(sql,param, holder);
}
通常,测试插入涉及尝试读回数据以确保它是按预期写入的。如果没有自然键,您始终可以在所有列上使用 select。如果table允许重复行,你应该先计算它们:
- 开始交易
- select 符合条件的行数。
- 在测试中调用您的方法
- select 符合条件的行数
- 回滚 tx
- 断言 count2 - count1 = 1
如果table不允许重复行:
- 开始交易
- 在测试中调用您的方法
- 读取符合条件的行
- 回滚 tx
- 断言行已读取
如果您没有事务管理器,则需要手动清理:删除 运行 插入函数前后的预期行。