設定選項

MockMvc 可以透過兩種方式進行設定。

WebApplicationContext

指向包含 Spring MVC 和控制器基礎設施的 Spring 配置。

Standalone

直接指向您想要測試的控制器,並以程式設計式方式配置 Spring MVC 基礎設施。

您應該使用哪種設定選項?

基於 WebApplicationContext 的測試會載入您實際的 Spring MVC 配置,從而得到更完整的整合測試。由於 TestContext 框架會快取載入的 Spring 配置,因此即使在測試套件中引入更多使用相同配置的測試,也能保持測試執行快速。此外,您還可以使用 @MockitoBean@TestBean 覆蓋控制器使用的服務,以便專注於測試 Web 層。

另一方面,Standalone 測試更接近於單元測試。它一次測試一個控制器。您可以手動向控制器注入模擬依賴項,並且不涉及載入 Spring 配置。這類測試更側重於風格,更容易看出正在測試哪個控制器,是否需要特定的 Spring MVC 配置才能工作等等。Standalone 設定也是編寫臨時測試來驗證特定行為或除錯問題的非常方便的方法。

與大多數“整合測試 vs 單元測試”的爭論一樣,這裡沒有絕對正確或錯誤的答案。但是,使用 Standalone 測試意味著需要額外的整合測試來驗證您的 Spring MVC 配置。另一種方法是,您可以使用 WebApplicationContext 編寫所有測試,這樣它們始終針對您實際的 Spring MVC 配置進行測試。