欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

spring中使用Mockito解決Bean依賴樹(shù)問(wèn)題方法-創(chuàng)新互聯(lián)

前提

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛(ài)。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶,將通過(guò)不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:主機(jī)域名、網(wǎng)站空間、營(yíng)銷(xiāo)軟件、網(wǎng)站建設(shè)、儀征網(wǎng)站維護(hù)、網(wǎng)站推廣。

本文不是針對(duì)Mockito的入門(mén)教學(xué) ,主要敘述如何簡(jiǎn)單的使用Mockito解決Bean依賴樹(shù)問(wèn)題,對(duì)于Mockito的學(xué)習(xí)請(qǐng)找其他的文章或者查閱官方文檔

基本概念 Junit初始化及存在的問(wèn)題

spring應(yīng)用在unit test時(shí),test是獨(dú)立運(yùn)行的,所以需要自行 init ApplicationContext,啟動(dòng) Ioc容器。

Junit要求:Test類(lèi)中涉及的所有Spring bean 注入成功才能完成applicationContext初始化,并啟動(dòng)IOC容器,否則無(wú)法執(zhí)行unit test。

ApplicationContext初始化的兩種方式 手動(dòng)注入(使用 @Bean或者 @Component 注入所需的類(lèi))編寫(xiě)@Configuration 類(lèi)(使用@ComponentScan 指定掃描beans) 兩種初始化方式存在的問(wèn)題

方式一:

所需的beans中,一個(gè)bean少注入了就會(huì)導(dǎo)致無(wú)法初始化上下文需要注入的bean太多時(shí),需要花費(fèi)大量的時(shí)間和精力,排查缺漏難度大

方式二:

顆粒度難以把控,隨著項(xiàng)目規(guī)模變大之后,可能導(dǎo)致bean導(dǎo)入過(guò)多,單元測(cè)試跑很久才能通過(guò)當(dāng)項(xiàng)目規(guī)模大了之后,bean之間的依賴往往是復(fù)雜的,掃描bean的方式可能出現(xiàn)一些不屬于自己模塊的未知問(wèn)題或者某些中間件在unitTest環(huán)境無(wú)法正常啟動(dòng),導(dǎo)致無(wú)法初始化上下文 什么是依賴樹(shù)?

spring中使用Mockito解決Bean依賴樹(shù)問(wèn)題方法

在開(kāi)發(fā)應(yīng)用時(shí),往往會(huì)出現(xiàn)如上圖的 樹(shù)型依賴 ,比如 serviceA 調(diào)用 serviceB,serviceB 又調(diào)用 serviceC 。

然而這只是一個(gè)簡(jiǎn)單的例子。真正的開(kāi)發(fā)中,往往一個(gè) service 會(huì)依賴多個(gè) service ,以及多個(gè) dao ,以此來(lái)實(shí)現(xiàn)業(yè)務(wù)邏輯。

而根據(jù)Junit要求,我們必須將樹(shù)的路徑經(jīng)過(guò)的所有節(jié)點(diǎn)(bean)都注入才能完成spring上下文初始化。這時(shí)如果bean之間的依賴耦合過(guò)大時(shí),就無(wú)法跳脫出兩種初始化方式帶來(lái)的問(wèn)題。

什么是Mockito?

在測(cè)試過(guò)程中,對(duì)于某些不容易構(gòu)造(如 HttpServletRequest 必須在Servlet 容器中才能構(gòu)造出來(lái))或者不容易獲取比較復(fù)雜的對(duì)象(如 JDBC 中的ResultSet 對(duì)象),用一個(gè)虛擬對(duì)象(Mock 對(duì)象)來(lái)創(chuàng)建以便測(cè)試的測(cè)試方法。

Mock 大的功能是幫你把單元測(cè)試的耦合分解開(kāi),如果你的代碼對(duì)另一個(gè)類(lèi)或者接口有依賴,它能夠幫你模擬這些依賴,并幫你驗(yàn)證所調(diào)用的依賴的行為。

簡(jiǎn)單來(lái)說(shuō):就是虛擬一個(gè)mock對(duì)象,這個(gè)對(duì)象在單元測(cè)試時(shí)會(huì)“貍貓換太子”,將原有bean進(jìn)行替換,“騙過(guò)”spring初始化,成功啟動(dòng)ioc容器,以此規(guī)避常規(guī)初始化方式帶來(lái)的種種問(wèn)題。

開(kāi)發(fā)場(chǎng)景

結(jié)合本人在工作中遇見(jiàn)的問(wèn)題,當(dāng)時(shí)我所寫(xiě)的模塊進(jìn)行unitTest時(shí),就出現(xiàn)了依賴樹(shù)過(guò)于龐大的問(wèn)題。

首先,我采用了常規(guī)的手動(dòng)注入(方式一),導(dǎo)致注入了很久都沒(méi)注入完,無(wú)法執(zhí)行測(cè)試。后來(lái)覺(jué)得這方法在這種情況不可行。然后,我采用了編寫(xiě)@Configuration 類(lèi)(方式二),同樣也存在一些問(wèn)題。一些不屬于我負(fù)責(zé)模塊的bean也被注入,其中某些涉及TaskSchedule的bean無(wú)法被正確注入,導(dǎo)致無(wú)法執(zhí)行測(cè)試。此時(shí)一個(gè)個(gè)bean探索,解決問(wèn)題顯然不現(xiàn)實(shí)。最后,我采用Junit+Mockito結(jié)合的方式進(jìn)行單元測(cè)試。按照依賴樹(shù)大小進(jìn)行區(qū)分。 依賴樹(shù)小的直接使用常規(guī)的手動(dòng)注入(方式一),省事,同時(shí)保證大部分邏輯按照代碼正常運(yùn)行依賴樹(shù)大的使用Mockito,避免前文提到的兩種初始化方式導(dǎo)致的問(wèn)題

使用 1 導(dǎo)入maven依賴

首先導(dǎo)入mockito maven依賴,版本請(qǐng)根據(jù)自己的spring版本選擇,否則會(huì)出現(xiàn)不兼容的情況。

<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
      <exclusions>
        <exclusion>
          <groupId>org.junit.vintage</groupId>
          <artifactId>junit-vintage-engine</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)建站chinadenli.net,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

分享題目:spring中使用Mockito解決Bean依賴樹(shù)問(wèn)題方法-創(chuàng)新互聯(lián)
文章起源:http://chinadenli.net/article20/ddieco.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化網(wǎng)站改版、做網(wǎng)站、網(wǎng)站建設(shè)微信公眾號(hào)、商城網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)