我想明白,如果我用@Transactional註釋我的junit類,Spring將只創建一個事務,它將在我的@Test方法之間共享並在最後回滾。反之,如果我用@Transactional標記每個@Test,就會創建一個新的事務並在@Test基礎上回滾。我在官方文檔中找不到預期的行爲(link)。Spring和JUnit,用@Transaction註釋類和方法的區別?
3
A
回答
4
將@Transactional
放在類級別上相當於將它放在每個測試方法上。
我不認爲有一個簡單的方法來實現你的第一個場景,即所有測試的單個事務。我不確定它會有多大意義,因爲測試將以隨機順序執行,所以您不能依靠看到其他人進行修改。當然,您可以始終使用單個事務從單個超級測試中顯式調用您的方法。
2
@Transactional
在JUnit測試用例類級別將在每個測試方法之前開始新的事務並在之後回滾。
你不能在測試類的開始階段輕鬆地開始新的事務,併爲整個類保持打開狀態,至少Spring不支持它。您的第一個解決方法是使用@BeforeClass
/@AfterClass
對,但它們必須是static
,因此您無權訪問事務管理器。
但首先問自己一個問題,你爲什麼要這樣做?聽起來像一個測試取決於另一個測試的輸出或數據庫副作用。這是一個很大的反測試模式,更不用說JUnit不能保證測試方法的執行順序。也許你只是在每個測試用例之前需要一個數據庫設置?在Spring事務的上下文中執行@Before
和@After
,所以你可以在那裏使用它們。
相關問題
- 1. Spring @Transaction註釋和異常處理
- 2. 用於junit測試的setProperty和ActiveProfiles註釋的區別
- 3. master和transaction表的區別
- 4. singlecache,multicache和assigncache在spring memcached註釋方面的區別
- 5. Spring Transaction Hibernate @Transaction註釋不能與@Autowired配合使用
- 6. 在JPA(Hibernate)中註釋字段和方法的區別?
- 7. playframework:@Transactional註釋和JPA.withTransaction()方法之間的區別
- 8. @Transaction @Service在Spring註釋配置
- 9. onetomany和manytomany註釋之間的區別
- 10. 地標和註釋之間的區別
- 11. Spring的@ModelAttribute方法註釋
- 12. Spring中@PreAuthorize和@security註釋有什麼區別?
- 13. Hibernate - 註釋和公共註釋之間的區別?
- 14. JPA級聯註釋和Hibernate級聯註釋之間的區別
- 15. Spring Batch JobExecution類的getAllFailureExceptions()和getFailureExceptions()方法有什麼區別?
- 16. 爲什麼@ Scheduled註釋不能用@Transaction註解。 Spring Boot
- 17. 使用Spring @Configuration和MethodInterceptor攔截帶註釋的方法
- 18. JUnit測試用例@Before和@After註釋
- 19. Spring,Hibernate,JUnit帶註釋的實體
- 20. 有沒有在包級別使用Spring @Profile註釋的方法?
- 21. Android,JUnit測試和失敗的BINDER TRANSACTION
- 22. Spring @ContextConfiguration註釋,TestNG和IDEA
- 23. Spring 3和JSR-330註釋
- 24. Spring @PreDestroy和@PostConstruct註釋
- 25. Spring AMQP/RabbitMQ和Hibernate Transaction Mananger
- 26. Spring @Transaction rollbackfor和Custom Repository
- 27. Spring Security:ROLE_ANONYMOUS和IS_AUTHENTICATED_ANONYMOUSLY的區別
- 28. spring jdbctemplate和Hibernate的區別
- 29. 與Java配置和Spring Security的安全方法註釋3.2
- 30. 遷移到Spring註釋控制器和傳統的onSubmit方法