首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >春季数据回滚仅部分回滚

春季数据回滚仅部分回滚
EN

Stack Overflow用户
提问于 2022-06-24 01:38:35
回答 1查看 87关注 0票数 0

在进行集成测试时,我试图测试存储过程的执行情况。为此,我需要执行以下步骤:

  • 插入一些安装数据
  • 执行存储过程
  • 找到由存储的proc

写入的下游回购中的数据。

但是,在测试完成之后,我能够成功地完成所有这些工作,只有由存储过程编写的行才会回滚。通过JdbcAggregateTemplate插入的行不会回滚。显然,我可以在测试声明的末尾手动删除它们,但我觉得在配置中(可能是在@Transactional@Rollback注释中),我肯定遗漏了一些东西。

代码语言:javascript
复制
@SpringBootTest
@Transactional
@Rollback
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
class JobServiceIntegrationTest @Autowired constructor(
    private val repo: JobExecutorService,
    private val template: JdbcAggregateTemplate,
    private val generatedDataRepo: GeneratedDataRepo,
) {

    @Nested
    inner class ExecuteMyStoredProc {

        @Test
        fun `job is executed`() {
            // arrange
            val supportingData = supportingData()

            // act
            // this data does not get rolled back but I would like it to
            val expected = template.insert(supportingData)

            // this data does get rolled back
            repo.doExecuteMyStoredProc()

            val actual = generatedDataRepo.findAll().first()

            assertEquals(expected.supportingDataId, actual.supportingDataId)
        }
    }

    fun supportingData() : SupportingData {
        ...
    }
}

如果这一切都是作为物理数据库事务的一部分完成的,我预计当外部事务回滚时,内部事务都会回滚。显然不是这样的,但这是我希望效仿的行为。

我已经做了大量的集成测试,它们都如我所期望的那样回滚,但通常我只是应用一些业务逻辑并将其写入到数据库中,没有比这更重要的东西了。其他测试中有关此测试的唯一唯一情况是,我正在执行存储的proc (并且存储的proc包含事务)。

我正在将这些数据写入一个Server,并在Kotlin中使用Spring。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-27 06:35:10

既然它似乎解决了这个问题,我的评论就成了一个答案:

我怀疑SP中的事务提交了先前的更改。你能为一个简单的SP发布代码吗?它会引起你所描述的问题,这样我就可以玩它了?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72738182

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档