Spring Mock測試你用上了嗎?

2021-10-24 07:37:00 字數 2528 閱讀 7891

在真實的測試當中,並不能所有的邏輯都可以自己控制,因此有了mock測試。今天就結合場景來講一下怎麼做mock測試。

適合物件:初次嘗試整合和使用mockito進行單元測試的開發同學
這裡選擇的是mockito + powermockito。為什麼會整合powermockito,是因為有個想要mock的方法是static方法。這個需要powermockito,假如都只是普通類,就可以不用了。

1、版本對應:這兩個mockito的版本是有乙個對應關係,假如不對應,會出現類找不到的情況。比如 classnotfound org/mockito/mockitoframework 。而網上也已經有對應關係如下鏈結

powermock/powermock​github.com

這是我的整合版本

org.mockito

mockito-core

2.28.2

test

org.powermock

powermock-module-junit4

2.0.2

test

org.powermock

powermock-api-mockito2

2.0.2

test

2、註解方式整合:因為使用spring boot的專案,所以考慮怎麼用註解方式整合。最後我的註解方案如下所示

@runwith(powermockrunner.class)

@preparefortest()

@powermockrunnerdelegate(springjunit4classrunner.class)

@powermockignore()

這幾個,都有自己的用處,分別說下:

tips:這些註解可以寫到乙個abstract testclass 上,後面的測試類繼承這個就方便了
好,正式開始mock。首先來講,網上那些例子,好多都太簡單了,不能當做實際場景。比如mock classa.method1,然後直接驗證method1的結果。這種只能驗證整合的對不對。還是結合真實場景比較好。

場景一:修改外部服務呼叫,比如呼叫支付寶支付,或者發個簡訊什麼的,也可以是資料庫查詢

有時候,我們不希望真的去呼叫外部(比如配置太複雜,比如收費,比如想模擬錯誤結果)。或者想自己控制資料庫查詢結果(或者遇到了我這邊只有正式環境才有某個庫的情況)。那這時候,就需要使用mock service來解決。

先擼**,再分析。

這個場景講解mock的常規使用手法

以及在spring注入service情況下,如何處理mock

public class mockitotest extends basetest 

}

這個場景感覺用的挺多的。demoservice是想要測試的功能,其中用到了remoteservice.sendrequest的結果。而又不想實際呼叫remoteservice。這時候就可以先把remoteservice.sendrequest給mock掉,給出自己設定的返回結果。

這時候要注意的乙個點是:remoteservice並不歸屬springcontext管理,所以run test 以後,會發現,這個mock毫無作用。debug之下,可以看到注入和mock的remoteservice並不是乙個例項。

那如何使remoteserivce變成mockservice,這裡有兩個思路。

一、就是上面的方案,用mockserivce去替換demoserivce裡的remoteservice。

demoservice.setremoteservice(remoteservice);
二、替換springcontext裡面的remoteserice,這就需要使用@mockbean 這個註解。 然後,所有注入的remoteservice,都是mock生成的service

@mockbean

remoteservice remoteservice;

但是據說mockbean有***,會多次重啟spring context。可能也會汙染上下文。暫時沒有去嘗試研究。
在我的場景裡,是自定義了乙個單例jdbcclient,client儲存連線池,然後發起請求。

這個是使用powermockito,因為只有他能mock static方法
先來**

public class mockitotest extends basetest 

}

這裡的主要用法就是 powermockito.mockstatic 這個。但是要結合之前的兩個註解,@runwith(powermockrunner.class) @preparefortest()這個使用才有效。

你用上Wi Fi 6了嗎?郭明錤 Wi

11月1日訊息,天風國際分析師郭明琪發布最新研判,wi fi 6 6e 7為元宇宙裝置無線化關鍵,wi fi 鏈為10年內數十億部頭戴顯裝置潛在市場之主要贏家。郭明琪在報告中指出,目前銷售中的手機與筆記型電腦機型中,僅不到5 的機型支援最新的wi fi 6,原因在於手機與筆記型電腦使用者程式設計客棧...

武裝你的測試

武裝你的測試 陳能技2007 8 23 原文 boost your testing super powers secret tools to add to your utility belt james bach 當我還是3歲的時候,我最喜歡的 片是 the fantastic four 當我的媽媽...

你如何拼寫測試

你如何拼寫測試 陳能技 2007 8 24 原文 how do you spell testing?a mnemonic to jump start testing james bach et測試 exploratory testing 強調測試設計和執行同步進行。但是我們如何組織我們的思想以便我們...