最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Awaitility同步異步工具實(shí)戰(zhàn)示例詳解

 更新時(shí)間:2022年08月25日 17:05:28   作者:螞蟻背大象  
這篇文章主要為大家介紹了Awaitility同步異步工具實(shí)戰(zhàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

引言

在編寫測試用例的時(shí)候遇到有異步或者隊(duì)列處理的時(shí)候經(jīng)常會(huì)用到 Thread.sleep() 等待來進(jìn)行測試。例如:DLedger 測試選舉的過程。當(dāng)DLedger Leader下線。此時(shí)DLedger會(huì)重新發(fā)起選舉,這個(gè)選舉的過程是需要一定時(shí)間。很多時(shí)候在測試代碼中就會(huì)使用 Thread.sleep 。

由于選舉需要的時(shí)間多少不確定所以sleep時(shí)間就會(huì)設(shè)置為開發(fā)者經(jīng)驗(yàn)的最大值。這樣會(huì)造成測試代碼會(huì)變得很慢。 當(dāng)然開發(fā)者可以通過自己輪詢來實(shí)現(xiàn)減少時(shí)間的消耗。

下面介紹一個(gè)處理這個(gè)一類問題的工具:awaitility

1. awaitility入門

Maven:

<dependency>
      <groupId>org.awaitility</groupId>
      <artifactId>awaitility</artifactId>
      <version>xxxx</version>
      <scope>test</scope>
</dependency>

文章編寫的時(shí)候版本為:4.2.0

1.1 靜態(tài)導(dǎo)入

為了有效地使用Awaitility,建議從Awaitility框架中靜態(tài)地導(dǎo)入以下方法:

org.awaitility.Awaitility.*

在使用的時(shí)候需要搭配Java的時(shí)間相關(guān)的類以及Junit相關(guān)類:

java.time.Duration.*

java.util.concurrent.TimeUnit.*

org.junit.Assert.*

1.2 簡單例子

例子1:

await().until(newUserIsAdded());

等待直到執(zhí)行newUserIsAdded()返回true. 這個(gè)是沒有返回值的。

例子2:

await().atMost(5, SECONDS).until(newUserWasAdded());

最多等待5秒,等待直到執(zhí)行newUserIsAdded()返回true. 這個(gè)是沒有返回值的。

例子3:

await().until( userRepositorySize(), equalTo(1) );

等待直到執(zhí)行userRepositorySize()返回方法對(duì)應(yīng)的值. 這個(gè)是有返回值

更多的例子可以參照官網(wǎng) 使用例子

2. awaitility在RocketMQ中的實(shí)戰(zhàn)

在RocketMQ的test cases 中有一些使用了 Thread.sleep,接下來我們看看如何使用awaitility進(jìn)行優(yōu)化,減少測試用例的執(zhí)行時(shí)間。以ControllerManagerTest測試用例為例子來解決,在代碼中可以看到有這樣的代碼:

上圖框出來的代碼主要的作用是什么呢?等待Broker的Master過期,但是過期的時(shí)間我們根據(jù)設(shè)置的心跳的過期時(shí)間來預(yù)估時(shí)間。所以這里填寫的是6秒當(dāng)然你也可以填寫10秒或者更長。

解決之前的執(zhí)行時(shí)間:

使用awaitility對(duì)代碼進(jìn)行改造重構(gòu):

重構(gòu)后的代碼,如上圖的紅線框出來部分。當(dāng)然我這里還對(duì)其他的進(jìn)行處理。

有興趣的可以關(guān)注一下RocketMQ的這個(gè)ISSUE:github.com/apache/rock…

使用awaitility重構(gòu)后的執(zhí)行時(shí)間:

時(shí)間有明顯的下降。相比之前的下降了5秒左右。

3. 總結(jié)

  • 在測試過程中引入awaitility能夠很大程度上方便測試,無需要每次都憑經(jīng)驗(yàn)去預(yù)估時(shí)間。并且很多時(shí)候這個(gè)Thread.sleep的時(shí)間不是很好估算。減少了單元測試執(zhí)行的時(shí)間。特別是像RocketMQ這樣大型的項(xiàng)目單元測試很多。并且很多都是去測試分布式的,如果使用Thread.sleep會(huì)導(dǎo)致整個(gè)單元測試的時(shí)間很長。
  • 無需自己去實(shí)現(xiàn)輪詢來減少單元測試的時(shí)間。

以上就是Awaitility同步異步工具實(shí)戰(zhàn)示例詳解的詳細(xì)內(nèi)容,更多關(guān)于Awaitility同步異步工具實(shí)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Spring Security獲取用戶認(rèn)證信息的實(shí)現(xiàn)流程

    Spring Security獲取用戶認(rèn)證信息的實(shí)現(xiàn)流程

    Spring Security是一個(gè)能夠?yàn)榛赟pring的企業(yè)應(yīng)用系統(tǒng)提供聲明式的安全訪問控制解決方案的安全框架。它提供了一組可以在Spring應(yīng)用上下文中配置的Bean,充分利用了Spring IoC,DI和AOP功能,為應(yīng)用系統(tǒng)提供聲明式的安全訪問控制功能
    2022-12-12
  • Spring?Cloud?Hystrix的基本用法大全

    Spring?Cloud?Hystrix的基本用法大全

    這篇文章主要介紹了Spring?Cloud?Hyxtrix的基本使用,它是Spring Cloud中集成的一個(gè)組件,在整個(gè)生態(tài)中主要為我們提供服務(wù)隔離,服務(wù)熔斷,服務(wù)降級(jí)功能,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07
  • spring security動(dòng)態(tài)配置url權(quán)限的2種實(shí)現(xiàn)方法

    spring security動(dòng)態(tài)配置url權(quán)限的2種實(shí)現(xiàn)方法

    對(duì)于使用spring security來說,存在一種需求,就是動(dòng)態(tài)去配置url的權(quán)限,即在運(yùn)行時(shí)去配置url對(duì)應(yīng)的訪問角色。下面這篇文章主要給大家介紹了關(guān)于spring security動(dòng)態(tài)配置url權(quán)限的2種實(shí)現(xiàn)方法,需要的朋友可以參考下
    2018-06-06
  • Spring?Cloud?Gateway服務(wù)網(wǎng)關(guān)限流問題及解決

    Spring?Cloud?Gateway服務(wù)網(wǎng)關(guān)限流問題及解決

    這篇文章主要介紹了Spring?Cloud?Gateway服務(wù)網(wǎng)關(guān)限流問題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • SpringCloud高可用配置中心Config詳解

    SpringCloud高可用配置中心Config詳解

    Spring Cloud Config 是一個(gè)解決分布式系統(tǒng)的配置管理方案,它包含了 server 和 client 兩個(gè)部分,這篇文章主要介紹了SpringCloud之配置中心Config(高可用),需要的朋友可以參考下
    2022-04-04
  • SpringBoot3快速整合MyBatisPlus的示例代碼

    SpringBoot3快速整合MyBatisPlus的示例代碼

    本文介紹了快速整合MyBatis-Plus到Spring Boot 3項(xiàng)目中,包括依賴引入、代碼生成器使用等,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-12-12
  • spring?jpa?審計(jì)功能自定義填充字段方式

    spring?jpa?審計(jì)功能自定義填充字段方式

    這篇文章主要介紹了spring?jpa審計(jì)功能自定義填充字段方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Java老矣 尚能飯否?

    Java老矣 尚能飯否?

    Java老矣,尚能飯否?各類編程語言橫空出世,紛戰(zhàn)不休,然而 TIOBE 的語言排行榜上,Java 卻露出了明顯的頹勢。這個(gè)老牌的語言,未來會(huì)是怎樣?
    2017-06-06
  • Intellij idea熱部署插件JRebel的使用

    Intellij idea熱部署插件JRebel的使用

    這篇文章主要介紹了Intellij idea熱部署插件JRebel的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • 教你在一分鐘之內(nèi)理解Java Lambda表達(dá)式并學(xué)會(huì)使用

    教你在一分鐘之內(nèi)理解Java Lambda表達(dá)式并學(xué)會(huì)使用

    今天給大家?guī)У奈恼率荍ava8新特性的相關(guān)知識(shí),文章圍繞著如何在一分鐘之內(nèi)理解Java Lambda表達(dá)式并學(xué)會(huì)使用展開,文中有非常詳細(xì)的介紹,需要的朋友可以參考下
    2021-06-06

最新評(píng)論

定襄县| 松原市| 梨树县| 永春县| 九寨沟县| 扬州市| 砀山县| 方城县| 玉溪市| 信阳市| 鹰潭市| 金乡县| 石门县| 黔江区| 桂阳县| 铁岭县| 富源县| 南宁市| 邯郸市| 长沙市| 嘉义县| 诸城市| 格尔木市| 东山县| 黑山县| 乌兰浩特市| 连平县| 铜山县| 盐边县| 莲花县| 济宁市| 满洲里市| 高要市| 桐庐县| 洪泽县| 辽中县| 屏南县| 双鸭山市| 城步| 岳阳市| 石楼县|