Spring Boot單元測試(Mock)

Spring Boot單元測試(Mock)

Java我的學習心得 2017-08-12 16:07

Spring Boot單元測試(Mock)

Mock數據庫

單元測試的重要性就很少說了,我這邊的工程通常都是Spring Boot+Mybatis(詳情可參看《Spring boot+MyBatis+PageHelper+JSON》),如今寫一下Spring Boot下怎麼測試Controller、Service。app

Controller測試

本文就簡單一點,寫一個Hello接口。負載均衡

Spring Boot單元測試(Mock)

Controller單元測試

HTTP請求測試:學習

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

Spring Boot單元測試(Mock)

HTTP測試類編碼

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

綠框的restTemplate,看過以前個人《Spring Cloud網關與負載均衡Zuul與Ribbon》就知道,與RestTemplate差很少,這就是個HTTP客戶端。rest

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

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請求,測試經過。

相關文章
相關標籤/搜索