集成测试DAO INSERT语句

时间:2019-02-25 19:09:01

标签: java integration-testing

我需要对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);
}

1 个答案:

答案 0 :(得分:1)

通常,测试插入涉及尝试回读数据以确保按预期方式写入了数据。如果没有自然键,则始终可以在所有列上进行选择。如果该表允许重复的行,则应首先对它们进行计数:

  • 开始交易
  • 选择符合条件的行数。
  • 调用被测方法
  • 选择符合条件的行数
  • 回滚tx
  • 断言count2-count1 = 1

如果表不允许重复的行:

  • 开始交易
  • 调用被测方法
  • 读取符合条件的行
  • 回滚tx
  • 断言行

如果没有事务管理器,则需要手动清理:在运行插入功能之前和之后删除预期的行。