Java 集成测试DAO INSERT语句
我需要对INSERT语句执行集成测试。Java 集成测试DAO INSERT语句,java,integration-testing,Java,Integration Testing,我需要对INSERT语句执行集成测试。 基本上,我需要一个自动测试,以确保在该查询中编写的SQL实际上是正确的。 我不确定如何编写这个集成测试 您需要考虑以下想法: 该方法执行一个fire-and-forget类型插入,因此对其进行单元测试是没有用的 我无法编写findById方法,因为该记录没有ID。在我的情况下,ID是无用的,因为这些记录永远不会被ID检索。此外,这将导致鸡和蛋的问题,因为findById或insert语句可能是错误的 我已经看到了一堆帖子,它们立即开始讨论单元测试。我不
基本上,我需要一个自动测试,以确保在该查询中编写的SQL实际上是正确的。
我不确定如何编写这个集成测试 您需要考虑以下想法:
- 该方法执行一个fire-and-forget类型插入,因此对其进行单元测试是没有用的李>
- 我无法编写findById方法,因为该记录没有ID。在我的情况下,ID是无用的,因为这些记录永远不会被ID检索。此外,这将导致鸡和蛋的问题,因为findById或insert语句可能是错误的李>
你能给我一些建议吗 代码:
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);
}
通常,测试插入涉及尝试读回数据以确保按预期写入。如果没有自然键,则始终可以在所有列上进行选择。如果该表允许重复行,则应首先对其进行计数:
- 开始交易
- 选择符合条件的行数
- 调用测试中的方法
- 选择符合条件的行数
- 回滚发送
- 断言count2-count1=1
- 开始交易
- 调用测试中的方法
- 读取符合条件的行
- 回滚发送
- 已读取断言行
如果没有事务管理器,则需要手动清理:在运行insert函数之前和之后删除所需的行。您需要编写代码,计算数据库中有多少行具有这些列值,在调用该方法之前和之后。@DawoodibnKareem那么您会同意我需要对find方法的依赖关系吗?无论如何,我看不到其他方法。我将通过直接向数据库发送SQL来测试这一点。