2010-10-27 50 views
1

我有一個擴展AbstractTransactionalJUnit4SpringContextTests的JUnit4測試。我有一個商業對象,我用@Transactional標記爲一個工作單元。工作單元更新數據庫,通知用戶&然後嘗試向他們發送通知消息。我配置了回滾MailException(春季簡單郵件API)的方法,並嘲笑MailSender在調用它來驗證回滾功能時拋出SendMailException。集成測試,它模擬異常/回滾條件AbstractTransactionalJUnit4SpringContextTests

儘管在我的單元測試中,事務並沒有回滾,我試圖弄清楚是否因爲它參與正在爲我的實際測試方法打開的事務,因爲那時測試方法並沒有不承諾或回滾。代表一個工作單元的方法被配置爲需要一個新的事務,並且我嘗試在spring配置中配置兩個事務管理器,並指定測試用例使用第二個事務管理器。無論如何,當我檢查單元測試方法中的數據時,即使應用程序代碼遇到郵件發送異常應該回滾它,它仍然會被修改。

任何見解都會很棒。

回答

0

我用一個基類具有以下注釋和擴展我的實際測試類從中:

@ContextConfiguration(locations="classpath:applicationContext-test.xml") 
@TransactionConfiguration(transactionManager="txManager", defaultRollback=true) 
@Transactional 
public abstract class IntegrationTestBase extends AbstractTransactionalJUnit4SpringContextTests 
{ 
    //...Some setup stuff with @Before 
} 

擴展此類標有@Transactional -annotation測試類,但我不確定是否有必要。無論如何,它似乎有訣竅,因爲日誌表明回滾發生在每次測試之後,並且在一個測試方法中進行的更改在另一個測試方法中不可見。

15:53:10564(6923)[INFO] org.springframework.test.context.transaction.TransactionalTestExecutionListener:280 - 測試執行後回退的事務用於測試上下文 [[@的TestContext 6dadfbe3識別TestClass = org.some.SomeTestClass,位置 =陣列[ '類路徑:的applicationContext-的test.xml'], testInstance = [email protected], TestMethod的= testSomething @ SomeTestClass, testException = [零]] ]

另請參閱@Transactional -annotations屬性rollbackFor,rollbackForClassName,noRollbackFor & noRollbackForClassName