2011-11-15 39 views
2

我正試圖編寫一個集成/單元測試,其中一個異常應用到一個DAO執行保存後 - 爲了驗證回滾行爲。我的想法是創建一個Spring AOP方面 - 並將@AfterReturning建議應用於DAO上的「保存」方法。如何測試回滾是否按預期工作?

DAO已經通過@Transactional建議進行了代理。

這似乎是正確的路要走嗎?

到目前爲止,我正在嘗試使用Spring ProxyFactory--在單元測試中代理DAO。

E.g.

ProxyFactory pf = new ProxyFactory(new MyFaultInjectingAspect()); 
pf.setTarget(myDao); 
MyDao proxiedDao = (BookmarkDao) pf.getProxy(); 

謝謝。

FYI:涉及到這個Is it ok to use DataSourceTransactionManager for ORM persistence instead of HibernateTransactionManager?

+1

你有交易的機制失效,因此導致回滾?你有沒有辦法讓你的測試成立這個失敗? –

+0

這個問題涉及如何創建該機制。我正在考慮使用一個方面來注入導致失敗的異常。 –

回答

1

我想有其他的方法,沒有任何AOP說,沒有什麼是寫在DB 真的檢查:

如果你有一個測試,驗證(如果沒有例外),該交易將提交,並將實體寫入數據庫,那麼您只需要進行簡單的第二次測試。

在這個測試中,你必須做同樣的事情,但有例外。然後,您只能驗證是否將註釋寫入數據庫。所以你不需要AOP的東西,你的測試變得更有意義,因爲它最終測試你真正想要的東西。 (我希望瞭解它的權利,這回的角色僅僅是禁止數據庫變化的技術。

+0

+1。感謝您的建議。我實際上試圖確認回滾*是*工作。但也許測試過於複雜。我可能會嘗試一種不同的方法。 –