當前位置:
首頁 > 知識 > Spring Boot單元測試(Mock)

Spring Boot單元測試(Mock)

Spring Boot單元測試(Mock)

Mock

單元測試的重要性就不多說了,我這邊的工程一般都是Spring Boot+Mybatis(詳情可參看《Spring boot+MyBatis+PageHelper+JSON》),現在寫一下Spring Boot下怎麼測試Controller、Service。


Controller測試

本文就簡單一點,寫一個Hello介面。

Spring Boot單元測試(Mock)

Controller

HTTP請求測試:

既然是測試Controller介面,肯定就是發送HTTP請求了,之前的文章我也有提到,可以使用Postman、Swagger進行測試,本文我們採用編碼的方式測試,新建HttpRequestTest類:

Spring Boot單元測試(Mock)

HTTP測試類

注意三個紅框,這是告訴Spring Boot啟動的時候採用一個隨機的埠,有助於在測試環境中避免衝突(官網解釋)。

綠框的restTemplate,看過之前我的《Spring Cloud網關與負載均衡Zuul與Ribbon》就知道,與RestTemplate差不多,這就是個HTTP客戶端。

運行測試通過。注意看日誌,會找到一行日誌:

Tomcat started on port(s):XXXXX

這說明整個Tomcat已經啟動成功了。

MockMVC測試:

注意上面的測試,通過日誌我們知道,其實就是啟動了Tomcat,然後通過TestRestTemplate構建了HTTP請求。但是在我們實際開發中,有一個現實的問題,我們一個工程會有很多的Controller、Service、Mapper,但是我們本次測試可能就測一個介面。為了一個介面,要啟動整個Tomcat,太浪費了。所以我們可以採用MockMVC,在不啟動的服務的情況下,測試介面:

Spring Boot單元測試(Mock)

Mock測試

實際開發中,肯定會有很多Controller,紅框內我們指定本次測試只實例化HellController這一個。

另外在開發的時候,Eclipse沒法通過快捷鍵進行import static,所以我們要手工導入以下:

Spring Boot單元測試(Mock)

導入

運行本測試,注意看日誌,就不會出現Tomcat started on port(s):XXXXX的記錄了。


Service測試

在實際開發中,Service的邏輯處理比較多,應該是最先被測試的,本示例增加一個Service和Mapper,如下:

Spring Boot單元測試(Mock)

Mapper

在我之前那個完整的工程中,這個註解應該是@Mapper,本例我沒引入資料庫,只是模擬一下,所以用了@Repository。Spring Boot單元測試(Mock)

Service

在@Service下應該還有事務註解@Transactional,本例只是模擬,所以也沒有加。

測試類如下:

Spring Boot單元測試(Mock)

測試類

注意紅框,在實際開發中,我們自己寫的Controller、Service很可能去調用別的同事或別的項目組寫的Service、Mapper,對方可能只寫了一個介面,沒有實現(比如本例中我寫的Mapper),這樣是沒法進行測試的。

Mock的作用就是創建一個虛擬的對象替代那些不易構造或不易獲取的對象。

本例中我都沒有引入資料庫的相關依賴,本來應該是連接資料庫的Mapper,現在就是一個單純的介面,如果不對Mapper進行處理,這個測試就沒法進行下去。

於是在第一個紅框內Mock了一個HelloMapper,第二個紅框對這個Mock對象的方法進行了處理,等於Mapper接收參數「leo」,返回結果「Hello leo」,給Service使用。

運行測試通過。


Controller測試(含Service)

在「MockMVC測試」一節中,我們只測了Controller里的一個方法,沒有引入Service,這在實際工作中是不可能的,我們要麼引入自己寫的Service,要麼引入其他同事寫的Service(介面形式),如果這時候引入的Service同樣沒有實現,這測試也沒法做下去。結合「Service測試」的內容,我們可以這麼做:

Spring Boot單元測試(Mock)

Controller

Controller新增一個方法,調用了Service。

Spring Boot單元測試(Mock)

測試類

測試類增加如上代碼,Mock一個假的Service,用when來處理Service,用MockMVC模擬HTTP請求,測試通過。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Java個人學習心得 的精彩文章:

Spring Boot自己實現簡版OAuth2.0
Spring Cloud服務追蹤與日誌聚合
Spring Boot API可視化Swagger
Spring Cloud分散式配置中心Config
Spring Cloud斷路器Hystrix

TAG:Java個人學習心得 |

您可能感興趣

測試精品 Suunto Spartan Sport Wrist HR Baro
Mozilla在Firefox中測試DNS over HTTPS
Google Chrome測試版支持原生Windows10通知
全球匯款公司Western Union測試Ripple技術
微軟正在iOS和Android上的Outlook中測試Cortana
Mozilla 測試 DNS over HTTPs
Golem發布Golem Brass Beta測試版本
Nokia 8開啟Android 8.1 beta版測試
關於PWA-Progressive Web App的一些測試思考
使用 BenchmarkDotnet 測試代碼性能
Mac 福音,Radeon ProRender插件Mac測試版來了!
Web Service和Web API滲透測試指南(一)
Linux下使用Speedtest測試網速
微軟開啟編譯和測試Windows 10 Redstone 5
Crytek的多人射擊遊戲Hunt:Showdown關閉alpha測試
Essential Phone 安卓8.1系統開啟測試
python介面測試之token&session的處理
Windows Server 2016 與 Linux 的一些網路性能測試
CyberFlood Fuzzing-照明系統里的網路測試
從論文到測試:Facebook Detectron開源項目初探