【问题标题】:How to test @Transactional method, where two table are getting updated如何测试@Transactional 方法,其中两个表正在更新
【发布时间】:2023-03-22 22:44:01
【问题描述】:

我正在尝试为使用以下方法的方法编写单元测试: @事务。 有两个方法被调用,每个方法都在两个表上运行更新查询,如果一个失败,另一个不应该运行或回滚。

我需要编写一个单元测试来检查事务是否正常工作。

请帮忙。 提前致谢。

【问题讨论】:

  • 到目前为止你有什么尝试?
  • 为什么?您不相信 Spring 框架为确保这一点而进行的 10000 多次测试?
  • @M.Deinum 我需要编写一个单元测试用例来确保代码覆盖率
  • 当你只添加一个测试时没有添加覆盖率?添加一个额外的测试相同的代码路径(但例外)不会增加任何百分比的覆盖率。
  • 没错!写了一个快乐的案例,我的经理让我写一个单元测试以确保 @Transactional 也能正常工作。你能帮我确保那能正常工作吗?

标签: java spring unit-testing transactions database-testing


【解决方案1】:

模拟第二次调用抛出异常关闭事务检查是否删除数据

【讨论】:

    【解决方案2】:

    测试失败条件并不是一件坏事,事实上这是应该做的事情。

    我会为此做集成测试,因为您想检查一个真实的数据库以查看故障是否按预期回滚。

    你有两个测试:

    1. 第一次更新失败,一切都应该停止,第二次更新不应该运行。
    2. 第一次更新成功,第二次失败,所以第一次更新应该回滚。

    如果您想要进行单元测试,请使用内存数据库。

    您不会说您正在使用哪个数据库,但通常您可以检查更新是否成功,因为更新语句会告诉您已更改了多少行。如果你得到零,或者更新语句有问题并收到错误消息,那么你知道你需要停止

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-02-14
      • 2011-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-19
      相关资源
      最近更新 更多