2011-12-22 214 views
26

我正在研究Spring應用程序(Spring 3.0)和以下分層體系結構,即Controller -> Service -> DAO layersJunit測試Spring服務和DAO層

我想寫服務和DAO層的單元測試用例,使用Junit
我查了春季官方網站,也嘗試了很多其他網站,但無法弄清楚一個簡單而簡單的方法。

任何人都可以提供一些有用的資源嗎?


編輯:
貌似Mockito是不錯的選擇。在Spring中使用它的任何好鏈接。

謝謝Alex建議。

+0

小心。鏈接「Mocking服務層」現在導致惡意頁面。 – Cenobyte321

+0

@ Cenobyte321謝謝,鏈接已刪除。 – xyz

+0

如果您使用休眠和彈簧啓動,爲什麼不在開始測試時將內存數據庫中的H2配置爲已初始化?然後在你的測試類上使用Annotation SpringBootTest AutoConfigureTestEntityManager Transactional,只需Autowired你的dao,你就可以真正地測試它,而不會模擬。更好地,你可以使用MockMvc並從控制器測試你的整個webservice(所以我想你控制器使用服務,使用dao) – amdev

回答

25

就資源而言,Spring的測試文檔非常好。這可以找到here

當您測試服務層時,您將需要使用一個模擬庫(如Mockito)來模擬您的DAO以及您的域圖層。這確保它們是真正的單元測試。

然後,要集成測試DAO與數據庫,可以使用該參考文檔中描述的Spring事務性測試實用程序。

+0

謝謝。我不知道Mockito。將嘗試並更新你。 – xyz

+0

我發現Mockito功能非常強大,易於使用。我所有的服務單元測試都使用它。 –

+0

剛剛看到,嘗試並喜歡它。謝啦。 使用Mockito進行Spring服務測試的任何好的鏈接? – xyz

4

不知道很多有關的資源,但它並不難,如果你有你的DAO +彈簧設定很好做。您需要以下內容:

  1. 表示JUNIT依賴關係。與Maven,這樣的事情:

    <dependency> 
        <groupId>junit</groupId> 
        <artifactId>junit</artifactId> 
        <version>4.8.2</version> 
    </dependency> 
    
  2. 測試類,其中放置的src/test/java下里面:

    @TransactionConfiguration(defaultRollback = true) 
    @ContextConfiguration({ "classpath:test-spring-context.xml" }) 
    @Transactional 
    @RunWith(SpringJUnit4ClassRunner.class) 
    public class SomeTests { 
        // ... 
    } 
    
  3. 爲您的春季設置上下文文件中引用你的DAO數據源放在裏面SRC /測試/資源。 某處在您的測試彈簧的context.xml:

    <import resource="datasource-test.xml" /> 
    

現在比如在Eclipse中,您可以運行該項目的JUnit測試。

需要更多的細節?此解決方案是否適用?

+0

謝謝。我如何測試服務層? – xyz

+0

不知道什麼是服務,但我假設它應該保存應用程序邏輯,只要控制器告訴它,就調用DAO上的CRUD方法?如果是這樣,沒有區別。您只需在上面的設置中注入服務類,調用方法,比較結果,之後所有將被回滾。 – Pete

+0

是的。通過服務我的意思是調用DAO方法的類。 – xyz