日常啰嗦
承接前一篇文章《Spring+SpringMVC+MyBatis+easyUI整合優(yōu)化篇(四)單元測試實例》,已經(jīng)講解了dao層和service層的單元測試,還有控制器這層也不能漏掉,因此本篇會講一下MockMvc,及controller控制層的單元測試,相關代碼已上傳,可自行下載。
我的github地址
為什么使用MockMvc?
可能我們在測試控制層的代碼都是啟動服務器,在瀏覽器中輸入URL,然后開始測試是否達到預期效果,發(fā)生錯誤的話,修改相關代碼并重啟服務器再次進行測試。分析一下這個過程,啟動服務器-->打開瀏覽器-->輸入URL-->等待返回結果-->修復bug-->重啟服務器.....循環(huán)。
其中的缺點也挺明顯的,在瀏覽器輸入URL的地址,如果是GET請求還好,POST請求或者DELETE請求怎么辦?只能借助其他工具,通過命令行編寫curl語句,或者借助谷歌瀏覽器的postman插件,亦或者自己在代碼中通過編寫相應httpClient方法來實現(xiàn)測試,但是這幾種方法都較為麻煩,而且測試用例并不能較好的保存。再說一個缺點,代碼修改后,往往需要再次重啟服務器,等待啟動完畢才能接下來的測試過程。
如果tomcat服務器啟動速度較慢,這將是一件非常痛苦的事情,測試驗證也不方便,且依賴網(wǎng)絡環(huán)境,這些原因導致測試起來很麻煩,而為了可以方便對Controller進行測試,且很好的保存和循環(huán)使用測試用例,則可以通過單元測試來解決,通過前面一篇文章,大家對于單元測試的便利性有了認識和體會,接下來通過引入MockMVC進行控制層的單元測試。
MockMvc實現(xiàn)了對Http請求的模擬,能夠直接使用網(wǎng)絡的形式,轉換到Controller的調用,這樣可以使得測試速度快、不依賴網(wǎng)絡環(huán)境,而且提供了一套驗證的工具,這樣可以使得請求的驗證統(tǒng)一而且很方便。
MockMvc單元測試實例
MockMvc測試過程:
1、創(chuàng)建請求
2、設置參數(shù)(這一步其實可以設置很多參數(shù),MockMvc提供了豐富的方法,但是本例中只是簡單的參數(shù)設置,因為方法都較簡單,并沒有復雜的調用)
3、mockMvc調用perform,調用controller的業(yè)務處理邏輯
4、perform返回ResultActions,返回操作結果,通過ResultActions,提供了統(tǒng)一的驗證方式。
測試代碼在test包中,也已經(jīng)傳到github上,可以下載到本地運行測試。
@RunWith(SpringJUnit4ClassRunner.class)@WebAppConfiguration@ContextConfiguration({"classpath*:/applicationContext.xml", "classpath*:/spring-mvc.xml", "classpath*:/mybatis-config.xml"})public class BookControllerTest { @Autowired private WebApplicationContext wac; private MockMvc mockMvc; @Before public void setup() { this.mockMvc = webAppContextSetup(this.wac).build(); } @Test &nbs