日常啰嗦

承接前一篇文章《Spring+SpringMVC+MyBatis+easyUI整合優(yōu)化篇(四)單元測(cè)試實(shí)例》,已經(jīng)講解了dao層和service層的單元測(cè)試,還有控制器這層也不能漏掉,因此本篇會(huì)講一下MockMvc,及controller控制層的單元測(cè)試,相關(guān)代碼已上傳,可自行下載。
我的github地址

為什么使用MockMvc?

可能我們?cè)跍y(cè)試控制層的代碼都是啟動(dòng)服務(wù)器,在瀏覽器中輸入U(xiǎn)RL,然后開始測(cè)試是否達(dá)到預(yù)期效果,發(fā)生錯(cuò)誤的話,修改相關(guān)代碼并重啟服務(wù)器再次進(jìn)行測(cè)試。分析一下這個(gè)過程,啟動(dòng)服務(wù)器-->打開瀏覽器-->輸入U(xiǎn)RL-->等待返回結(jié)果-->修復(fù)bug-->重啟服務(wù)器.....循環(huán)。
其中的缺點(diǎn)也挺明顯的,在瀏覽器輸入U(xiǎn)RL的地址,如果是GET請(qǐng)求還好,POST請(qǐng)求或者DELETE請(qǐng)求怎么辦?只能借助其他工具,通過命令行編寫curl語句,或者借助谷歌瀏覽器的postman插件,亦或者自己在代碼中通過編寫相應(yīng)httpClient方法來實(shí)現(xiàn)測(cè)試,但是這幾種方法都較為麻煩,而且測(cè)試用例并不能較好的保存。再說一個(gè)缺點(diǎn),代碼修改后,往往需要再次重啟服務(wù)器,等待啟動(dòng)完畢才能接下來的測(cè)試過程。
如果tomcat服務(wù)器啟動(dòng)速度較慢,這將是一件非常痛苦的事情,測(cè)試驗(yàn)證也不方便,且依賴網(wǎng)絡(luò)環(huán)境,這些原因?qū)е聹y(cè)試起來很麻煩,而為了可以方便對(duì)Controller進(jìn)行測(cè)試,且很好的保存和循環(huán)使用測(cè)試用例,則可以通過單元測(cè)試來解決,通過前面一篇文章,大家對(duì)于單元測(cè)試的便利性有了認(rèn)識(shí)和體會(huì),接下來通過引入MockMVC進(jìn)行控制層的單元測(cè)試。
MockMvc實(shí)現(xiàn)了對(duì)Http請(qǐng)求的模擬,能夠直接使用網(wǎng)絡(luò)的形式,轉(zhuǎn)換到Controller的調(diào)用,這樣可以使得測(cè)試速度快、不依賴網(wǎng)絡(luò)環(huán)境,而且提供了一套驗(yàn)證的工具,這樣可以使得請(qǐng)求的驗(yàn)證統(tǒng)一而且很方便。

MockMvc單元測(cè)試實(shí)例

MockMvc測(cè)試過程:
1、創(chuàng)建請(qǐng)求
2、設(shè)置參數(shù)(這一步其實(shí)可以設(shè)置很多參數(shù),MockMvc提供了豐富的方法,但是本例中只是簡(jiǎn)單的參數(shù)設(shè)置,因?yàn)榉椒ǘ驾^簡(jiǎn)單,并沒有復(fù)雜的調(diào)用)
3、mockMvc調(diào)用perform,調(diào)用controller的業(yè)務(wù)處理邏輯
4、perform返回ResultActions,返回操作結(jié)果,通過ResultActions,提供了統(tǒng)一的驗(yàn)證方式。

測(cè)試代碼在test包中,也已經(jīng)傳到github上,可以下載到本地運(yùn)行測(cè)試。

@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
        
		

網(wǎng)友評(píng)論