我想測試一個通過在循環中調用DAO將數據插入到表中的服務方法。該服務的方法都添加了Unittest使用REQUIRES_NEW的事務方法並始終強制回滾
@Transactional(propagation = Propagation.REQUIRES_NEW)
的單元測試調用服務的方法,並標註了
@Transactional
現在我想告訴大家,它應該總是在做一個回滾事務結束。我不想在testruns之後手動清理數據庫。
@Rollback和EntityManager.getTransaction()。setRollbackOnly()不起作用。我認爲原因是註釋和setRollbackOnly()僅適用於由test-method創建的事務,而不是由service-method創建的事務。
有誰知道如何解決?
模擬DAO,手動注入一個新構建的服務,並測試該方法。您不需要Spring上下文或事務來進行單元測試服務。 –
這就是我現在正在做的事情。但無論如何,我仍然想知道是否可以將事務設置爲rollbackonly。 – treeno
如果你這樣做,你不需要回滾任何東西,因爲你不會有交易。 'new Service(mockDao).callMethod()'不會啓動一個事務,所以沒有什麼可以回滾的。 –