集成测试 DAO INSERT 语句

Integration testing DAO INSERT statement

我需要对 INSERT 语句执行集成测试。
基本上,我想要一个自动化测试,以确保在该查询中写入的 SQL 实际上是正确的。
我不确定如何编写此集成测试。

您需要考虑以下想法:

我看到很多帖子立即开始讨论单元测试。我不想对此进行单元测试,我想编写一个集成测试来确保我的 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
  • 断言行已读取

如果您没有事务管理器,则需要手动清理:删除 运行 插入函数前后的预期行。