我會盡量回答你的一些問題。
關於對控制器進行單元測試,有時我發現需要添加Spring的模擬請求和響應,因爲某些彈簧功能期望請求上下文中的請求和響應。
class MyTest {
private MockHttpServletRequest request;
private MockHttpServletResponse response;
@BeforeMethod(alwaysRun = true)
public void setup() {
request = new MockHttpServletRequest();
response = new MockHttpServletResponse();
controller = new Controller(/*inject dependencies here*/);
}
}
這是很容易弄清楚,因爲如果它們不存在,你會得到一個非常具體的錯誤,指出請求或響應不在範圍內。
與模型相關,我發現返回一個ModelAndView更容易,並添加了一些檢查輸出參數和視圖名稱的測試。
public void shows_xxx_index_view {
assertThat(modelAndView.getViewName(), equalTo("controller/index"));
}
public void model_contains_search_results {
assertThat(modelAndView.getModelMap().get("searchResults"), equalTo(expected_results));
}
而且我不知道模型是否被覆蓋。
這是我從一個小項目中獲得的經驗,所以我決不是專家,但我發現這種方法很有用。
謝謝! (分鐘) – NimChimpsky