2017-05-04 54 views
2

我試圖讓我的頭在澤西島的單元測試。澤西單元測試:內存容器vs灰熊

直接不依賴於Jersey的類可以使用標準JUnit進行單元測試。這個是好的。

但也有澤西島(或者,我應該說JAX-RS?)依賴類。爲了測試這些(包括註釋的正確性,序列化,狀態碼等),Jersey提供了包含基類JerseyTest類的「測試框架」。

這也很好,可以理解。

然而,官方文檔指定了幾種類型的受支持的容器,其中可以執行JerseyTest的子類。

好像這些容器可以分爲兩種類型:

  1. 真正容器
  2. 在內存中的容器

從我目前(新手)的角度來看,所有類型#1箱提供相同的功能。因此,讓我們以灰熊爲第一代表。

現在很明顯,內存容器(根本不是真正的容器)比灰熊更快。因此,我想使用這個容器來測試Jersey依賴類。但是從the official documentation這種說法混淆了我:

此容器不支持servlet和其他容器依賴 的功能,但它是簡單的單元測試的理想選擇。

我試圖谷歌比較內存容器與灰熊,但沒有找到任何明確的比較。我也讀this highly technical thread,但內存容器的缺點仍然不清楚。

在這方面,我有兩個問題:

  1. 什麼「servlet和其它容器相關的特徵」是(不需要一個全面的清單,但只是一般的描述)?
  2. 如果我選擇內存容器,那麼我可以遇到通過測試的代碼情況,但生產失敗(如果有問題,我將在生產環境中使用Tomcat)?

感謝

回答

1

什麼「servlet和其它容器相關的特徵」是(不需要一個全面的清單,但只是一般的描述)?

說你需要使用HttpServletRequestServletContext等在你的資源。或者,如果您正在使用影響澤西島應用程序的serlvet過濾器或偵聽器。這些是servlet功能。

其他「容器功能」只是指您在生產中使用的容器特有的任何其他功能。例如,用灰熊,你可以注入一個灰熊專用的Request對象。

如果我選擇內存容器,那麼是否可以遇到通過測試的代碼情況,但生產失敗(如果有問題,我將在生產環境中使用Tomcat)?

主要是如果您使用上述項目。

請參閱example of where a servlet environment is required。在這裏,有一個Servlet過濾器被用於安全。所以過濾器需要在測試中配置。和another example where HttpServletRequest is needed

+0

這是一個純粹的運氣,有這樣的上師在線)) – Vasiliy

+0

但有一點還不是很清楚:我可以通過測試和失敗的代碼?我的意思是,如果我將來會開始使用這些功能,我的測試是否會失敗(這很好),或者測試會繼續傳遞,但是代碼在生產中會失敗?我想我的問題是我是否可以將使用內存容器的單元測試作爲某種類型的集成測試進行處理...... – Vasiliy

+0

我的意思是一旦您使用測試框架,它幾乎是一個集成測試,無論您是使用Grizzly或內存提供者。它僅取決於您在代碼中使用的功能,以確定您是否可以放棄使用內存提供程序。兩個提供程序都通過相同的Jersey引擎運行應用程序。這只是與「服務器」提供商通過一個額外的服務器層 –