1. 程式人生 > >dubbo應用程式的單元測試環境搭建(springtest,powermock,mockito)(一)

dubbo應用程式的單元測試環境搭建(springtest,powermock,mockito)(一)

最近,專案中頻繁用到dubbo,而且java工程用引用了幾十個關聯絡統的服務(如使用者認證,基礎服務,客戶平臺)。這些服務都是dubbo服務,對我們僅提供了一個介面,服務通過zookeeper註冊,並給我們提供服務。我們的專案都是基於spring的。spring整合dubbo,就可以對這些外部服務進行注入和使用了。

    但是對於單元測試來說卻出現了難題:領域模型的測試不是問題,主要都是自己的程式碼,加上一些mock就可以輕鬆測試;但是如果我想測試應用服務層(使用外部服務最多的地方),很多情況下就需要啟動spring環境,而這樣就需要載入外部系統的服務了。問題是外部的服務給我們的jar包中,只有服務的介面。啟動時如果按照正常開發環境的配置載入spring context,那麼明顯是依賴了外部環境,如果沒有啟動zookeeper或者本機不聯網,抑或是關聯絡統沒有啟動,spring context載入將會失敗,這是單元測試的忌諱。如果使用專門的單元測試的spring配置檔案,去掉外部關聯絡統的consumer配置,啟動會直接失敗,更別提測試了。

 還有寫其他問題,如測試靜態方法,私有方法;mock框架與springtest如何整合。spring的aop代理類如何mock一些預設的實現,測試資料庫如何選擇。總之問題超多。好吧,該進入正題了。

   1.測試靜態類,私有方法的問題

        簡單一句話,用powermock。powermock可以做到修改位元組碼而改變類的行為,這不多說了,大家自己搜一下,官網上例子通俗易懂。目前我在maven中的關於powermock,mockito的依賴是這樣加入的:

<dependency>
				<groupId>org.powermock</groupId>
				<artifactId>powermock-api-mockito</artifactId>
				<version>1.6.6</version>
			</dependency>

			<dependency>
				<groupId>org.mockito</groupId>
				<artifactId>mockito-all</artifactId>
				<version>1.10.19</version>
			</dependency>
			<dependency>
				<groupId>org.powermock</groupId>
				<artifactId>powermock-module-junit4</artifactId>
				<version>1.6.6</version>
				<scope>test</scope>
			</dependency>
			<dependency>
				<groupId>org.powermock</groupId>
				<artifactId>powermock-module-junit4-rule-agent</artifactId>
				<version>1.6.6</version>
				<scope>test</scope>
			</dependency>
			<dependency>
				<groupId>org.powermock</groupId>
				<artifactId>powermock-module-junit4-rule</artifactId>
				<version>1.6.6</version>
				<scope>test</scope>
			</dependency>
			<dependency>
				<groupId>org.jacoco</groupId>
				<artifactId>org.jacoco.agent</artifactId>
				<classifier>runtime</classifier>
				<version>0.7.9</version>
				<scope>test</scope>
			</dependency>

最後的話這個jacoco不是mock的依賴,是一個測試覆蓋率的外掛。也推薦一下給大家用,哈哈。

    2.powermock與springtest配合使用的問題

        第一個問題解決了,不錯!第二個問題就來了。spring標準的Runner是SpringJUnit4ClassRunner,如果用這個Runner,那麼powermock的@PrepairForTest就沒法使用了(也就是靜態mock,私有方法mock的關鍵),因此如果想使用靜態和私有方法mock就必須使用用Powemock的Runner,但是又如何啟動spring context呢?

     經過一些查詢,終於解決了這個問題,方法就是用powermock的代理, 在測試類上加上這樣的註解:

@PowerMockIgnore({"java.lang.management.*","javax.management.*","javax.xml.*","org.xml.sax.*","org.apache.xerces.*","org.w3c.*"})
@RunWith(PowerMockRunner.class)
@PowerMockRunnerDelegate(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:META-INF/spring/test-spring.xml")

Runner使用PowerMockRuner(就是RunWith註解的值);使用powermock提供的代理來使用SpringJUnit4ClassRunner;@PowerMockIgnore的作用是忽略一些powermock使用的classloader無法處理的類,不使用的話,啟動用例就會報錯。

classpath:META-INF/spring/test-spring.xml 是單元測試專門的spring配置檔案,和域程式碼使用的配置有些不同。這個檔案我放在/test/resources/spring/目錄下。

  到此,一個基於PowerMock,springtest和Mockito的基本配置就都弄完了。好了,第一部分先到這裡。待續

相關推薦

dubbo應用程式單元測試環境搭建(springtest,powermock,mockito))

最近,專案中頻繁用到dubbo,而且java工程用引用了幾十個關聯絡統的服務(如使用者認證,基礎服務,客戶平臺)。這些服務都是dubbo服務,對我們僅提供了一個介面,服務通過zookeeper註冊,並給我們提供服務。我們的專案都是基於spring的。spring整合dubb

【Android進階】Junit單元測試環境搭建以及簡單有用

rar theme 選擇 http 技術分享 才幹 ack package family 單元測試的目的 首先。Junit單元測試要實現的功能,就是用來測試寫好的方法是否可以正確的運行,一般多用於對業務方法的測試。 單元測試的環境配置 1.在Andro

mac下 CLion gtest 單元測試環境搭建

mac下 CLion gtest 單元測試環境搭建 1,下載gtest原始碼,將下載解壓後的檔案放到CLion工程目錄中,如下所示: 2,修改CMakeList.txt檔案,內容如下: cmake_minimum_required(VERSION 3.9) project

阿里雲 linux伺服器環境搭建學習 安裝jdk

由於公司用於工作開發的電腦效能不佳,平時在工作過程中沒問題,但是自己去研究一下新框架的時候,一下跑2個idea+4-5個timcat時效能就不夠用了,所以自己購買了一臺低配的阿里雲伺服器,用於自己平時的學習。 寫這個部落格也是記錄下自己從頭到尾搭建服務環境的一個過程,畢竟平時在伺服器上動來動去的

[Angular] Angular環境搭建及新建專案

基本環境搭建 Angular CLI是一個命令列工具,可以快速構建Angular應用,可以執行包括測試、打包和釋出等很多工。 安裝完成後在終端輸入命令 node -v 和 npm -v 可以驗證是否安裝成功。 ➜ node -v v6.10.0 ➜

為Android應用程式讀取/dev下裝置而提權

//分別遍歷/sys/class /sys/block /sys/devices device_init() { coldboot(fd,"/sys/class"); coldboot(fd,"/sys/block"); coldboot(fd,"/sys/devices"); } //後

搭建 vue2 單元測試環境(karma+mocha+webpack3)

let 配置 換膚 AC ant RM 不能 .net CA 從網上找了很多例子關於單元測試,都是如何新建項目的時候的添加單元測試,用vue-cli中怎麽添加,但是我的項目已經生成了,不能再一次重新初始化,這時如何添加單元測試,這裏面遇到了好多坑,寫在這裏記錄一下心得。 1

使用ItelliJ IDEA 搭建Junit 4單元測試環境

進行一些功能測試,以及那些陳子麻事,總是比較乏味的,只有持續學習新技術新知識才是正道。 選擇了IT,就選擇了持續學習。 最近忙裡偷閒,花了點空閒時間,學習了使用ItelliJ IDEA來搭建Junit 4的單元測試環境,已經將其搭建成功。 下面先對Itel

openstack controller ha測試環境搭建記錄十四)——配置cinder存儲節點)

nbsp 設置 ntp reason script snap rate 文件 esc 先簡述cinder存儲節點的配置: 1、IP地址是10.0.0.41; 2、主機名被設置為block1; 3、所有節點的hosts文件已添加相應條目; 4、已經配置了ntp時間同

openstack controller ha測試環境搭建記錄)——配置neutron網絡節點)

efault delete none _for set ext ranges tar edr 在網絡節點配置內核參數:vi /etc/sysctl.confnet.ipv4.ip_forward=1net.ipv4.conf.all.rp_filter=0net.ipv4.

Monkey測試環境搭建

luna too 如果 ftw sdk ati version java環境 shell命令 一、JAVA環境的搭建 1.安裝jdk-7u60-windows-x64(JAVA1.7.0,也可安裝最新版的JAVA1.8.0),默認安裝路徑C盤; 2.JAVA環境變量的搭

Appium Android測試環境搭建 for Mac

detail 資源 and 搭建 car log nbsp www 查找 Appium Android測試環境搭建 涉及的資源,工具都很多 ,從網上各種資料查找,整合一下資源,針對小白級別。 1、Appium安裝: 轉載自:http://www.cnblogs.com/os

python+selenium 自動化測試環境搭建

python selenium 自動化測試 軟件測試selenium 是一個web的自動化測試工具,不少學習功能自動化的同學開始首選selenium ,相因為它相比QTP有諸多有點:* 免費,也不用再為破解QTP而大傷腦筋* 小巧,對於不同的語言它只是一個包而已,而QTP需要下載安裝1個多G 的程序。*

【轉1】Appium 1.6.3 在Xcode 8, iOS 10.2模擬器)測試環境搭建 經驗總結

div tar post bug span trace 版本 test 4.0 Appium 1.6.3 在Xcode 8, iOS 10.2(模擬器)測試環境搭建 經驗總結 關於 Appium 1.6.3 在Xcode 8, 10.2 的iOS模擬器上的問

【轉2】Appium 1.6.3 在Xcode 8 (真機)測試環境搭建 經驗總結

原因 ftl 關於 經驗 結束 views 報錯 catch live Appium 1.6.3 在Xcode 8 (真機)測試環境搭建經驗總結 關於 Appium 1.6.3 在Xcode 8, 1真機上環境搭建問題更多,寫此文章,供大家參考,讓大家少走彎路。

REDIS-sentinel測試環境搭建(MAC)

usr lov rbo 當我 mas 恢復 環境 log dmi 最近在搭建Redis-Sentinel測試時,將遇到的問題在這標註下. 部署: 三個Sentinel實例,端口為:36379,36380,36381,將Sentinel配置文件放在同一目錄下.結果運行Sent

後臺測試環境搭建

測試環境 mysql用戶 maxperm tom chmod mysqld sta apache net 最近公司要上新項目,所以要太機器做測試,領導要求把所有服務搭建到同一臺服務器上。 開發需求:1.java 1.7.0_45 路徑:/usr/java/jdk1.0.0_

測試用例設計和測試環境搭建

返回 保存 srs spa 文件中 開發 需求規格說明書 溝通 方式 等價類 定義:1.等價:如果多個輸入在程序中處理方式相同,則認為這些輸入時等價的,測是一個即可。    2。輸入:分為兩類,有效輸入(可以保存)、無效輸入(不可保存)    3結合:有效等價類、無效等價類

手機自動化測試環境搭建eclipse+python+uiautomator)

list fig finish java環境 pda 所有 開發 界面 自己 最近在公司做了一個階段的手機APP自動化測試,是在已有的環境基礎上進行腳本開發,所有對基礎的環境搭建不是很清楚,後來自己閑來無事就在家裏搭建了一下下,接下來和大家分享一下搭建過程。 一:搭建手機A

Web自動化測試環境搭建1基於firefox火狐瀏覽器)

ktr gecko 激情 後臺 自動更新 fire 這一 把手 HA   自動化測試是時代趨勢,因此很多測試人員開始研究自動化測試,web自動化測試化測試並不難,但是很多人都是被擋在了環境搭建這一步,後面學習激情全無,這裏,韜哥手把手教大家搭建火狐瀏覽器下的自動化測試環境(