2014-03-13 77 views
0

好吧,我來自Rails,在嘗試使這個工作有點困難。Spring MVC測試沒有嘲諷

權利知道這是我從Spring框架理解(並請糾正我,如果我錯了):

  1. 我使用Tomcat。所以它基本上是在web.xml之後,並檢查從那裏的任何配置文件,以初始化和獲取豆自動有線等。

  2. 在我的例子中,我有關於web.xml的上下文配置位置的應用-config.xml中

  3. 事實證明,應用-config.xml中具有其他配置文件,將採取以下護理:

休眠:

<util:properties id="hibernatePropertiesConfigurer" location="classpath:hibernate.properties"/> 

JSON轉換器:

<import resource="classpath:json-converter.xml"/> 

經理(@Component)掃描儀:

<import resource="classpath:scanner-config.xml"/> 

等等。換句話說,這些工作就好了,web服務器起牀,經理(@Components)爲@Autowired@Controllers可以給他們打電話,數據庫中的對象持久等

現在,我想測試,即運行JUnit測試。我確實發現了很多關於如何嘲笑這些層(經理,控制器)的例子,但我想嘗試真實的東西:

  • 測試將實例@Controller
  • 測試將張貼到@Controller對象
  • @Controller將有@Component@Bean
  • @Component真正@Autowired(輕慢不得版)將持續一個@Entity
  • 而且,最重要的是,d atabase應該看到變化。 (我正在使用MySQL)
  • 然後,測試將使用@Component@Autowired實例,並查詢數據庫以確認發生持久性。

這是可能的,完全可以通過Spring,JUnit測試嗎?

+1

在Spring 3.2中,查看'MockMvc'和整個MVC測試堆棧。 –

+0

不幸的是我被Spring 3.1卡住了。然而,我看了這個:https://github.com/spring-projects/spring-mvc-showcase.git,雖然它非常有用,但我想不嘲笑地嘗試。換句話說,我想要在測試中擁有與Web相同的應用程序上下文 – marcelorocks

+0

有一個與3.1一起工作的「MockMvc」預覽版:https://github.com/spring-projects/spring-test-mvc 。也許它仍然(但你真的需要升級)? –

回答

0

如果你想驗證整個堆棧的行爲,它不再是一個單元測試,而是一個集成測試。

如果您使用的是Maven,您可以在pre-integration-test階段使用類似Maven Jetty插件的方式將您的項目部署到嵌入式容器中。然後在你的測試中,在本地主機上對服務器進行HTTP調用,並驗證你得到了預期的響應。然後,在post-integration-test階段,關閉Jetty服務器。

+0

這是否意味着即使我不想測試控制器,而是單獨使用持久層,我仍然需要得到類似的東西,以便能夠在我的數據庫上真實存儲?那麼數據庫預定義的數據(夾具)呢?這是否也照顧到了這一點? – marcelorocks

+0

不確定數據庫設備的含義。所有這些都是將你的webapp從頭開始部署到一個容器中,這樣你就可以像對待客戶一樣運行HTTP請求。如果你正在測試單獨的類,那麼如果沒有MockMVC框架,你可能不會運氣。 –