【问题标题】:test Junit deleteById doesn't pass if id is not present如果 id 不存在,则测试 Junit deleteById 不通过
【发布时间】:2021-01-17 02:49:57
【问题描述】:

我正在做一些 junit 测试来改进我的应用程序。其中之一,测试单个原始 (由 id 作为主键表示)(如果存在)的删除,这工作正常。现在我正在测试我的应用程序在我想删除数据库中不存在的 id 时的行为。

我的期望是我的测试通过了 0 行受影响,但他没有通过给我这个错误:

不存在 id 为 326L 的类 com.package1.package2.package3.entities.className 实体!

一些建议?

【问题讨论】:

  • 添加出现错误的代码
  • jpa 自动生成查询。我只调用 public void deleteById(id)。如果删除找不到要删除的数据,我期望的是类似 sql 查询。只需 0 行受删除命令影响

标签: java spring unit-testing jpa junit


【解决方案1】:

解决方案:

方法应该是:

    @Query (your query, nativeQuery=true)

    @Modifying
    @Transactional
    void DeleteById(@Param(id) Long id)

【讨论】:

    【解决方案2】:

    deleteById() from CrudRepository 首先尝试通过Id 查找实体。

    如果没有找到实体,它会抛出异常;您可以拥有自己的存储库并声明 deleteAllByIdIn() 方法,该方法将 id 集合作为参数,ORM 将为您创建其实现。 p>

    这样,即使不存在具有此类 ID 的实体,您也不应该出现任何异常。或者,您始终可以进行原生 SQL 查询,通过 id 删除 DB 中的行。

    【讨论】:

    • 刚刚尝试编写原生查询。现在给出这个: 原因:org.postgresql.util.PSQLException:查询没有返回结果。顺便说一句,使用本机查询删除现有 id,查询有效。
    • 您是否使用存储库进行本机查询?如果是这样,您可能忘记添加 @Modifying 注释
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    相关资源
    最近更新 更多