当前位置: 首页 > 知识库问答 >
问题:

使@transactional和@rollback在Spring Boot测试中工作

南门新荣
2023-03-14

我有一个Spring Boot应用程序,并使用@springboottest进行测试。
我试图让我的数据库在每个测试中处于相同的状态。
我的测试类使用@transactional@rollback进行注释。
我测试的服务也使用@transaction进行注释。
据我所知,在激活TransactionManager跟踪日志时,提交了Spring Boot应用程序事务,并按预期回滚了测试事务。
问题来自这样一个事实,即用我的设置创建

你知道我可以做什么来让测试中创建的事务在应用程序中是相同的吗?

示例代码:
https://github.com/sey/transactional
您将看到GreetingsResourceTest失败,因为我认为有两个不同的上下文没有共享事务。
但是,GreetingsServiceTest按预期工作,因为在测试期间没有创建特定的应用程序上下文。

共有1个答案

谷翰飞
2023-03-14

Spring有一个表示事务传播行为的传播级别e,用于事务性注释。是覆盖Spring如何使用@transactional创建事务的唯一方法:

MANDATORY
Support a current transaction, throw an exception if none exists.

NESTED
Execute within a nested transaction if a current transaction exists, behave like      PROPAGATION_REQUIRED else.

NEVER
Execute non-transactionally, throw an exception if a transaction exists.

NOT_SUPPORTED
Execute non-transactionally, suspend the current transaction if one exists.

REQUIRED
Support a current transaction, create a new one if none exists.

REQUIRES_NEW
Create a new transaction, and suspend the current transaction if one exists.

SUPPORTS
Support a current transaction, execute non-transactionally if none exists.
 类似资料:
  • 我是一个新的springboot和我正在考虑它为一个新的项目。在测试其功能时,我使用@Transactional注释总是失败。 我创建了一个小的MySql数据库,并将其连接到该数据库,设置此application.properties文件: 为什么?

  • 我在同一个测试类中有两个JUnit测试,每个都标记为@Transactional,第一个创建用户,第二个创建用户,并检查我们是否可以获得这些用户。 问题是,当第二个测试运行时,第一个测试创建的用户仍然在数据库中。 谢谢你抽出时间。

  • 与@mockbean和@spybean一样,有没有类似于@fakebean/@dummybean的东西? 其思想是,该实例是100%真实的(具有预期的生产内部状态),并且它覆盖(或者添加bean,以防在配置中没有声明)上下文中的bean。理想情况下,您不需要创建TestConfiguration类并将其设置为Primary,因为这样可以在每个测试的基础上控制假冒,只有在需要时才可以。否则它使用主的

  • SpringWeb应用程序的事务JUnit测试失败。 具体地说:如果我分别使用maven执行每个测试,它们将运行: 如果我执行 我在其中一个测试中发现JPA错误: 如果我设置surefire插件为每个测试重新创建整个JVM,它们也会运行,这当然需要花费大量的时间。 应用程序设置: Spring,与Spring Roo(因此proxyMode=asjectJ!) Eclipselink作为JPA提供

  • 我今天好像赢不了... 有没有一种方法可以从Spock SpringBootTest集成测试中的关系中读取,而无需将测试注释为或添加不切实际的? 或者,是否有方法从测试用例中启动Spring-Batch作业? 让我详细说明... 我试图为我的Spring Batch reporting流程提供一个简单的Spring Boot Integration测试,该测试从Dangled web of DB2

  • 我想确保@Transactional注释工作,所以我写了一篇测试save and Publishing文章--我的kafka publisher是一个模拟,它会在任何调用上抛出异常。我想确保MongoDB回滚持久化的文章。 现在我的测试失败了,因为无法在MongoClient中启动会话 我还尝试创建一个自定义的IMongodConfig 并启动复制: 因此,我的问题是,是否有可能创建一个运行的复制