為什麼使用mockmvc?
(業務角度)
在基於springboot開發介面的過程中,測試時必不可少的,起初我們開發人員常用的測試工具是:postman、swagger
在我們公司一般使用的是swagger測試,通過構造param引數,請求頭傳參等,請求目標介面獲取返回的content,一般都是肉眼去檢視之後確認介面是否調通。從我們leader的角度來講,這並不能成為乙個測試通過的標誌,使用mockmvc,以及斷言**去判斷通過(2次斷言判斷),只有真真實實的看到了判斷,通過了判斷才能算是我們介面測試成功了。
(技術了解角度)
對模組進行整合測試時,希望能夠通過輸入url對controller進行測試,如果通過啟動伺服器,建立http client進行測試,這樣會使得測試變得很麻煩,比如,啟動速度慢,測試驗證不方便,依賴網路環境等,所以為了可以對controller進行測試,我們引入了mockmvc。
mockmvc實現了對http請求的模擬,能夠直接使用網路的形式,轉換到controller的呼叫,這樣可以使得測試速度快、不依賴網路環境,而且提供了一套驗證的工具,這樣可以使得請求的驗證統一而且很方便。
上述摘自
主要是忽略網路對測試帶來的一些問題,更專注與介面本身;測試也更為便捷。
1) 乙個方法乙個介面,一一對應,有據可循
2)**判斷,確保通過的合理
開始使用mockmvc
首先是新增的依賴
org.springframework.boot
spring-boot-starter-test
test
然後建立測試類,並為類新增註解
@runwith(springrunner.class)
@springboottest(classes = )
@autoconfiguremockmvc
***.class為你的啟動類
@autoconfiguremockmvc註解會在下面說
然後就是建立mockmvc之後用於測試
@autowired
private mockmvc mockmvc;//這裡我們使用了自動裝配
自動裝配都能理解,但是這個mockmvc的自動裝配是一定要配合@autoconfiguremockmvc這個註解的
如果沒有配合使用那麼就會報錯,無法找到適配的bean為其注入。
測試請求
mvcresult result = mockmvc
. perform(post("/company/api/pc/v1/test") //請求的方式 請求路徑
.content("") //引數(使用的是content) 同樣也可以使用.param(key,value)方法去設定
.headers(httpheaders)) //設定請求頭
.andexpect(status().isok()) //確保成功的判斷
.andreturn();//返回
string content=result.getresponse().getcontentasstring();//返回體
然後上述**中用到了httpheaders 這是個org.springframework.http.httpheaders的類
用於設定請求頭
其實mockmvc.header(key,value)可以單獨設定,但大多數放在請求頭里的都是驗證資訊,重複的也是cv一下,不如就抽象一下,看著舒服。
上述例子只是其中的一種,mockmvc還有很多可以用於測試的方法和引數屬性型別,這就不一一展開了。這主要也只是我在開發過程中,吃成長快樂的乙個過程,必要需要用到再具體使用相應的方法。
還沒結束
這裡只是我們的請求可以單獨的執行,debug了還不能算成功,因為測試的目的是得到明確的成功或失敗。、
斷言(assert)的引入
需要匯入
import org.junit.assert;
斷言字面意思上就是判斷一句話
assert.asserttrue(content.length()>0);//裡面是乙個boolean 判斷
然後我去了解了一下這個assert
小寫的assert在jdk1.4的時候被引入成為了乙個關鍵字
用法
assert(1>0)//也同樣是判斷
斷言最重要的一點是必須不依賴它們完成任何程式實際所需的行為。
斷言只在程式執行時有效,斷言為true則繼續執行,false則丟擲異常。僅用於測試!!!
後續
在之後寫testcase的時候mockmvc報了空指標
解決方案
/**
* 所有測試方法執行之前執行該方法
*/@before
public void before()
使用MockMvc進行Junit單元測試
一 單元測試的目的 簡單來說就是在我們增加或者改動一些 以後對所有邏輯的乙個檢測,尤其是在我們後期修改後 不論是增加新功能,修改bug 都可以做到重新測試的工作。以減少我們在發布的時候出現更過甚至是出現之前解決了的問題再次重現。這裡主要是使用mockmvc對我們的系統的controller進行單元測...
使用MockMvc進行Junit單元測試
註解解釋 runwith 表示使用spring test元件進行單元測試 import org.junit.before import org.junit.test import org.junit.runner.runwith import org.springframework.beans.fa...
request對介面引數進行測試模板
import requests import unittest from time import sleep class weathertest unittest.testcase def setup self pass 正常查詢長沙的天氣,斷言 def test weather changsha ...