2012-05-23 88 views
12

我使用Spring 3.2,Hibernate和JUnit 4中Spring @Transactional在JUnit測試中不起作用?

吾道類如下:

@Transactional public class SomeDaoImpl implements SomeDao {

對這項工作的更新操作,如果直接從Web應用程序執行。但是,我看到運行更新方法的junit集成測試實際上並未持續進行更改。當junit方法執行時,事務是否會回滾?

回答

11

DAO不應該是事務性的。 DAO如何知道它是否應該參與更大的交易?

服務應該在典型的Spring分層體系結構中擁有事務。

對數據庫運行單元測試的典型做法是回退。你不想讓你的測試改變數據庫,除非你已經建立了一個可以隨意刪除和重新創建的測試數據庫。

這個問題應該是:您的測試如何寫入,如何進行交易?如果你永遠不會提交,你永遠不會看到記錄。

+0

對不起應該補充說我使用hibernate進行持久化。 – Nilesh

+0

不會改變我的答案。 – duffymo

+2

無論如何,它不應該是你的回答評論:-)。順便說一句,你上面提到的最佳做法是很好的發表。我認爲你迷失在試圖迂腐,忘記回答真正的問題! – Nilesh