2

標題解釋我的問題100%。假設Spring Boot/MVC中有註釋類@ControllerAdvice。在我的情況下,它包含@ExceptionHandler註釋。好的,我可以對這個類進行單元測試(它將從Exception類的信息中返回格式化的JSON)。這很簡單 - 特別是在使用Spock時。如何在春季控制器建議集成測試

但是集成測試呢?測試我的Spring庫是否正確的唯一方法是創建僅存在用於測試目的的控制器,並向它添加一些方法,例如。拋出特定種類的異常,看看它是否返回我設計的@ControllerAdvice返回。但它看起來很醜陋 - 僅爲測試現有代碼創建額外的代碼。

所以我的問題是 - 你如何做@ControllerAdvice集成測試?你只是不這樣做,創建專門的控制器只測試@ControllerAdvice或只是測試它使用現有的控制器提供例如錯誤的數據,將導致異常被拋出(在我的情況下,如果它是@InitBinder方法,我們將檢查ModelAndView )?

回答

0

對於Spring框架的集成測試的測試應做到以下幾點:

  • 實例化應用程序上下文。在你的情況下,應用程序上下文必須包含控制器和控制建議
  • 就由控制器定義的HTTP端點的請求
  • 斷言結果

您可以在集成測試的更多細節這裏的春天:http://docs.spring.io/spring/docs/current/spring-framework-reference/html/integration-testing.html#spring-mvc-test-framework

+0

我知道,但在你的解決方案中有涉及的控制器。我的問題是 - 我應該創建單獨的控制器來測試@ControllerAdvice類或使用現有的? – Chlebik

+0

我不會創建一個僅用於測試建議的新控制器,爲什麼不使用現有的控制器?通過這種方式,您可以測試意圖在應用程序中工作的實際流程。 –

+0

我們假設我想測試ValidationException的處理程序。當我嘗試訪問外部系統,獲取一些數據,然後創建一個對象並驗證它時,我的應用程序中唯一產生這個異常的地方就是生成的。它主要通過'@ Service' bean來完成。那麼您如何建議在集成測試期間使用現有控制器來模擬這種情況? – Chlebik