2017-10-13 118 views

回答

1

當您使用MockMvc時,您正在測試應用程序的一個實例,其中HTTP請求週期已被模擬。所以,這裏的測試範圍只是您的應用程序的MVC方面。我認爲這通常不會被稱爲「集成測試」,而是更接近單元測試(儘管它的範圍比單個類大得多)。

當您使用TestRestTemplate您正在測試您的應用程序,即你「雨後春筍」整個應用程序上下文的真正實例,並調用它作爲外部演員。這通常被稱爲「集成測試」,它可能是最接近您的實際使用情況的測試。

現在,由於通過TestRestTemplate調用的「完整堆棧」集成測試可以提供MockMVC測試提供的覆蓋範圍的超集,因此您可能想知道爲什麼您會打擾MockMVC測試。如果是這樣,那麼我認爲這是一個問題... ...

  • 測試範圍; MockMVC測試用例通常比完整的集成測試更快,更容易啓動(因爲它們使用的應用程序上下文更少)。另外,由於他們使用較少的appolication上下文,您可能不必努力去模擬您的應用上下文在測試中表現不佳的任何方面。

  • 易用性; MockMVC附帶靜態助手,用於斷言HTTP狀態,詢問和斷言JSON響應等。當然YMMMV,但對於許多人來說,這些易於開發並幫助提供可讀的測試用例。

在實踐中,你也許想用這兩種方法的組合:

  • MockMVC測試整個控制器層的詳細測試,包括所有的映射,快樂與悲傷路徑,所有調用以及對HTTP狀態代碼,內容主體等的深刻斷言
  • TestRestTemplate從用戶角度表達的主要流程的測試例如Save a new FooSearch for all FoosSubmit an invalid Foo update等使用斷言側重於哪些用戶看到/感興趣的位。
+0

感謝您的詳細解釋!我唯一不能確定的是MockMVC測試更快。它需要完全相同的時間(在我的機器上) – DimarZio

相關問題