日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁(yè) > 科技  > 軟件

我們一起聊聊異地多活之業(yè)務(wù)定制型異地多活架構(gòu)

來(lái)源: 責(zé)編: 時(shí)間:2023-11-28 09:33:42 285觀看
導(dǎo)讀1.摘要Rust中的測(cè)試函數(shù)是用來(lái)驗(yàn)證非測(cè)試代碼是否是按照期望的方式運(yùn)行的, 測(cè)試函數(shù)體通常需要執(zhí)行三種操作:1.設(shè)置任何所需的數(shù)據(jù)或狀態(tài);2.運(yùn)行需要測(cè)試的代碼;3.斷言其結(jié)果是我們所期望的。本篇文章主要探討了Rust

1.摘要

Rust中的測(cè)試函數(shù)是用來(lái)驗(yàn)證非測(cè)試代碼是否是按照期望的方式運(yùn)行的, 測(cè)試函數(shù)體通常需要執(zhí)行三種操作:1.設(shè)置任何所需的數(shù)據(jù)或狀態(tài);2.運(yùn)行需要測(cè)試的代碼;3.斷言其結(jié)果是我們所期望的。本篇文章主要探討了Rust自動(dòng)化測(cè)試的幾種常見(jiàn)場(chǎng)景。EC128資訊網(wǎng)——每日最新資訊28at.com

EC128資訊網(wǎng)——每日最新資訊28at.com

2.測(cè)試函數(shù)詳解

EC128資訊網(wǎng)——每日最新資訊28at.com

在Rust項(xiàng)目工程中, 可以對(duì)任意函數(shù)進(jìn)行自動(dòng)化測(cè)試, 前提是需要在被測(cè)試函數(shù)上面加上#[test]注解, 然后運(yùn)行cargo test命令進(jìn)行函數(shù)自動(dòng)化測(cè)試, Rust會(huì)查找所有被#[test]注解的函數(shù)并自動(dòng)進(jìn)行測(cè)試。EC128資訊網(wǎng)——每日最新資訊28at.com

先看下面一段代碼:EC128資訊網(wǎng)——每日最新資訊28at.com

#[test]fn add_calc() {    let result = 1 + 2;    assert_eq!(result, 3);}

在上面的代碼中, 我實(shí)現(xiàn)了一個(gè)加法計(jì)算的函數(shù): add_calc(), 將加法結(jié)果保存到不可變變量result中, 并使用了assert_eq!宏來(lái)斷言1+2的結(jié)果, assert!宏由標(biāo)準(zhǔn)庫(kù)提供, 在希望確保測(cè)試過(guò)程中一些條件為true時(shí)非常有用。在函數(shù)上方加上了#[test]注解, 表示該函數(shù)將執(zhí)行自動(dòng)化測(cè)試, 運(yùn)行: cargo test看下結(jié)果:EC128資訊網(wǎng)——每日最新資訊28at.com

圖片圖片EC128資訊網(wǎng)——每日最新資訊28at.com

從測(cè)試結(jié)果中, 可以看到test add_calc ... ok 這行, 表示該函數(shù)測(cè)試通過(guò)了。EC128資訊網(wǎng)——每日最新資訊28at.com

現(xiàn)在我修改下斷言的結(jié)果, 將代碼修改為:EC128資訊網(wǎng)——每日最新資訊28at.com

#[test]fn add_calc() {    let result = 1 + 2;    assert_eq!(result, 4);}

再次運(yùn)行cargo test命令, 返回結(jié)果如下:EC128資訊網(wǎng)——每日最新資訊28at.com

圖片圖片EC128資訊網(wǎng)——每日最新資訊28at.com

可以看到, 計(jì)算的結(jié)果是3, 但斷言相等的條件是等于4, 因此函數(shù)執(zhí)行失敗, add_calc()函數(shù)自動(dòng)化測(cè)試不通過(guò)。EC128資訊網(wǎng)——每日最新資訊28at.com

接下來(lái)我們?cè)偌尤胍粋€(gè)函數(shù), 看看在具有多個(gè)函數(shù)的前提下, 同時(shí)具備成功和失敗的情況, 代碼如下:EC128資訊網(wǎng)——每日最新資訊28at.com

#[test]fn add_calc() {    let result = 1 + 2;    assert_eq!(result, 3);}#[test]fn another_method() {    panic!("執(zhí)行失敗,拋出一個(gè)異常!")}

在上面的代碼中, 增加了一個(gè)名為another_method()的函數(shù), 該函數(shù)直接使用panic!拋出一個(gè)異常, 直接扮演了函數(shù)執(zhí)行失敗的角色, 而上面的add_calc()函數(shù)我講assert_eq!宏修改正確, 將扮演執(zhí)行成功的角色, 使用cargo test命令看下結(jié)果:EC128資訊網(wǎng)——每日最新資訊28at.com

圖片圖片EC128資訊網(wǎng)——每日最新資訊28at.com

可以看到, add_calc()函數(shù)測(cè)試沒(méi)問(wèn)題, 后面用綠色ok表示, 而another_method()函數(shù)執(zhí)行失敗, 使用紅色的FAILED標(biāo)記。EC128資訊網(wǎng)——每日最新資訊28at.com

3.自定義失敗信息

EC128資訊網(wǎng)——每日最新資訊28at.com

在上面的案例中, 我使用了assert_eq!宏來(lái)斷言結(jié)果, 同樣, 也可以向宏傳遞一個(gè)可選的失敗信息參數(shù), 可以在測(cè)試失敗時(shí)將自定義的失敗信息一并打印出來(lái), 使用自定義信息有個(gè)好處, 當(dāng)測(cè)試失敗時(shí), 能更好的理解代碼到底出了什么問(wèn)題, 看一段下面的代碼:EC128資訊網(wǎng)——每日最新資訊28at.com

pub fn make_string(name: &str) -> String {    format!("Hello,{}!", name)}#[test]fn is_contain_name() {    let result = make_string("cargo");    assert!(result.contains("cargo"));}

在這段代碼中, 定義了一個(gè)函數(shù)make_string, 該函數(shù)接收一個(gè)字符串參數(shù), 并在函數(shù)內(nèi)部通過(guò)format!宏格式化字符串后返回, 在函數(shù)is_contain_name()中, 傳入一個(gè)字符串"cargo", assert!會(huì)判斷make_string()函數(shù)返回的字符串中是否會(huì)包含"cargo"字符串,如果包含就是成功的,否則就失敗, 這里我們能預(yù)言結(jié)果應(yīng)該是成功的, 測(cè)試一下看看:EC128資訊網(wǎng)——每日最新資訊28at.com

圖片圖片EC128資訊網(wǎng)——每日最新資訊28at.com

結(jié)果跟我們預(yù)想的一樣, 現(xiàn)在再加入一些更詳細(xì)的變化信息看看, 代碼如下:EC128資訊網(wǎng)——每日最新資訊28at.com

pub fn make_string(name: &str) -> String {    format!("Hello,{}!", name)}#[test]fn is_contain_name() {    let result = make_string("rustup");    assert!(result.contains("cargo"), "make_string中不包含該字符串,值為:`{}`", result);}

我在assert!宏中加入了變量打印, 假如make_string()函數(shù)沒(méi)有返回預(yù)期的結(jié)果, 那結(jié)果到底是什么,這里我們將能看到失敗原因, 測(cè)試結(jié)果如下:EC128資訊網(wǎng)——每日最新資訊28at.com

圖片圖片EC128資訊網(wǎng)——每日最新資訊28at.com

從結(jié)果可以看到, 函數(shù)的確測(cè)試失敗了, 但我們看到了關(guān)鍵信息, 失敗的原因是因?yàn)閙ake_string()函數(shù)返回的字符串內(nèi)容為:Hello,rustup!,這個(gè)結(jié)果與斷言中的result.contains("cargo")結(jié)果是不同的, “Hello,rustup!”字符串中并不包含"cargo"字符串,所以函數(shù)測(cè)試失敗。EC128資訊網(wǎng)——每日最新資訊28at.com

4.檢查崩潰異常

EC128資訊網(wǎng)——每日最新資訊28at.com

除了使用斷言宏之外, Rust還提供了一個(gè)should_panic用來(lái)檢測(cè)程序中的panic,并且提供了一個(gè)名為expected的參數(shù)用來(lái)自定義消息,看一段下面的代碼:EC128資訊網(wǎng)——每日最新資訊28at.com

pub fn number_calc(value: i32) -> i32 {    let ret_value = 40;    if value < 0 {        panic!("值必須大于0,傳參的值為:{}", value)    }    return ret_value}#[test]#[should_panic(expected = "傳參不能小于0")]fn is_contain_name() {    let result = number_calc(-1);}

在number_calc()函數(shù)中, 如果判斷參數(shù)傳入的值小于0, 會(huì)拋出一個(gè)panic, 為了監(jiān)視是什么原因?qū)е? 在函數(shù)is_contain_name()上面使用should_panic進(jìn)行監(jiān)控, 并使用expected參數(shù)指定自定義消息, 如果遇到傳入的參數(shù)小于0, 將觸發(fā)該消息打印, 使用cargo test運(yùn)行一下看看結(jié)果:EC128資訊網(wǎng)——每日最新資訊28at.com

圖片圖片EC128資訊網(wǎng)——每日最新資訊28at.com

從結(jié)果可以看到, 的確檢測(cè)到了panic產(chǎn)生, panic打印了本身的消息, 最后一行shoud_panic也觸發(fā)了消息, 并打印出失敗的原因。EC128資訊網(wǎng)——每日最新資訊28at.com

5.使用Result<T, E>測(cè)試

EC128資訊網(wǎng)——每日最新資訊28at.com

先看一段下面的代碼:EC128資訊網(wǎng)——每日最新資訊28at.com

pub fn number_calc(value: i32) -> i32 {    let ret_value = 40;    if value < 0 {        return 30    }    return ret_value}#[test]fn is_contain_name() -> Result<(), String>{    if number_calc(2) == 40 {      OK(())  }else{    Err(String::from("結(jié)果不等于40,請(qǐng)檢查原因!"))  }}

在上面的代碼中, is_contain_name()函數(shù)的返回類(lèi)型現(xiàn)在變?yōu)?Result<(), String>, 在函數(shù)體中, 不同于調(diào)用assert_eq!,現(xiàn)在如果測(cè)試通過(guò),將返回Ok(()), 在測(cè)試失敗時(shí), 返回帶有String的Err錯(cuò)誤。現(xiàn)在傳入?yún)?shù)為2, 將顯示正常的結(jié)果:EC128資訊網(wǎng)——每日最新資訊28at.com

圖片圖片EC128資訊網(wǎng)——每日最新資訊28at.com

現(xiàn)在我們?cè)賯魅胍粋€(gè)小于0的負(fù)值看看,結(jié)果如下:EC128資訊網(wǎng)——每日最新資訊28at.com

圖片圖片EC128資訊網(wǎng)——每日最新資訊28at.com

可以看到, 如果使用Result<(), String>接收結(jié)果, 當(dāng)出來(lái)錯(cuò)誤時(shí), 將返回一個(gè)Error,并打印對(duì)應(yīng)的自定義消息。EC128資訊網(wǎng)——每日最新資訊28at.com

6.總結(jié)

EC128資訊網(wǎng)——每日最新資訊28at.com

在本篇文章中, 我們使用#[test]注解完成了對(duì)指定函數(shù)的自動(dòng)化測(cè)試, 使用assert!宏對(duì)錯(cuò)誤進(jìn)行斷言, 在斷言中自定義錯(cuò)誤顯示消息用于查看更詳細(xì)的錯(cuò)誤原因。使用了should_panic對(duì)panci錯(cuò)誤進(jìn)行了監(jiān)控, 最后使用Result<T, E>替代斷言分別完成了代碼測(cè)試和自定義錯(cuò)誤消息打印, 在以后的實(shí)際應(yīng)用中, 可能還會(huì)有一些組合測(cè)試的場(chǎng)景出現(xiàn), 到時(shí)候再具體問(wèn)題具體分析。EC128資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-34601-0.html我們一起聊聊異地多活之業(yè)務(wù)定制型異地多活架構(gòu)

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: 聊聊 Calico BGP容器網(wǎng)絡(luò)實(shí)踐

下一篇: 手把手教你寫(xiě)一個(gè)Shell腳本部署你的服務(wù)

標(biāo)簽:
  • 熱門(mén)焦點(diǎn)
  • 小米官宣:2023年上半年出貨量中國(guó)第一!

    今日早間,小米電視官方微博帶來(lái)消息,稱(chēng)2023年小米電視上半年出貨量達(dá)到了中國(guó)第一,同時(shí)還表示小米電視的巨屏風(fēng)暴即將開(kāi)始。“公布一個(gè)好消息2023年#小米電視上半年出貨量中國(guó)
  • Java NIO內(nèi)存映射文件:提高文件讀寫(xiě)效率的優(yōu)秀實(shí)踐!

    Java的NIO庫(kù)提供了內(nèi)存映射文件的支持,它可以將文件映射到內(nèi)存中,從而可以更快地讀取和寫(xiě)入文件數(shù)據(jù)。本文將對(duì)Java內(nèi)存映射文件進(jìn)行詳細(xì)的介紹和演示。內(nèi)存映射文件概述內(nèi)存
  • 零售大模型“干中學(xué)”,攀爬數(shù)字化珠峰

    文/侯煜編輯/cc來(lái)源/華爾街科技眼對(duì)于絕大多數(shù)登山愛(ài)好者而言,攀爬珠穆朗瑪峰可謂終極目標(biāo)。攀登珠峰的商業(yè)路線有兩條,一是尼泊爾境內(nèi)的南坡路線,一是中國(guó)境內(nèi)的北坡路線。相
  • 梁柱接棒兩年,騰訊音樂(lè)闖出新路子

    文丨田靜 出品丨牛刀財(cái)經(jīng)(niudaocaijing)7月5日,企鵝FM發(fā)布官方公告稱(chēng)由于業(yè)務(wù)調(diào)整,將于9月6日正式停止運(yùn)營(yíng),這意味著騰訊音樂(lè)長(zhǎng)音頻業(yè)務(wù)走向消亡。騰訊在長(zhǎng)音頻領(lǐng)域還在摸索。為
  • 大廠卷向扁平化

    來(lái)源:新熵作者丨南枝 編輯丨月見(jiàn)大廠職級(jí)不香了。俗話說(shuō),兵無(wú)常勢(shì),水無(wú)常形,互聯(lián)網(wǎng)企業(yè)調(diào)整職級(jí)體系并不稀奇。7月13日,淘寶天貓集團(tuán)啟動(dòng)了近年來(lái)最大的人力制度改革,目前已形成一
  • 攜眾多高端產(chǎn)品亮相ChinaJoy,小米帶來(lái)一場(chǎng)科技與人文的視聽(tīng)盛宴

    7月28日,全球數(shù)字娛樂(lè)領(lǐng)域最具知名度與影響力的年度盛會(huì)中國(guó)國(guó)際數(shù)碼互動(dòng)娛樂(lè)展覽會(huì)(簡(jiǎn)稱(chēng)ChinaJoy)在上海新國(guó)際博覽中心盛大開(kāi)幕。作為全球領(lǐng)先的科
  • 聯(lián)想小新Pad Pro 12.6將要推出,搭載高通驍龍 870 處理器

    聯(lián)想小新Pad Pro 12.6將于秋季新品會(huì)上推出,官方按照慣例直接在發(fā)布會(huì)前給出了機(jī)型的所有參數(shù)。聯(lián)想小新 Pad Pro 12.6 將搭載高通驍龍 870 處理器,重量為 5
  • 與兆芯合作 聯(lián)想推出全新旗艦版筆記本電腦開(kāi)天N7系列

    聯(lián)想與兆芯合作推出全新聯(lián)想旗艦版筆記本電腦開(kāi)天 N7系列。這個(gè)系列采用兆芯KX-6640MA處理器平臺(tái),KX-6640MA 處理器是采用了陸家嘴架構(gòu),16nm 工藝,4 核 4 線
  • 蘋(píng)果MacBook Pro 2021測(cè)試:仍不支持平滑滾動(dòng)

    據(jù)10月30日9to5 Mac 消息報(bào)道,蘋(píng)果新的 14 英寸和 16 英寸 MacBook Pro 2021 上市后獲得了不錯(cuò)的評(píng)價(jià),亮點(diǎn)包括行業(yè)領(lǐng)先的性能,令人印象深刻的電池續(xù)航,精美豐
Top 主站蜘蛛池模板: 惠州市| 年辖:市辖区| 咸丰县| 蒙山县| 临泉县| 白水县| 马鞍山市| 合川市| 柘荣县| 盱眙县| 阳曲县| 怀来县| 玉环县| 彰化市| 海安县| 太仆寺旗| 台中市| 广丰县| 和静县| 泗洪县| 龙山县| 华亭县| 台中市| 库伦旗| 集贤县| 沂水县| 普格县| 马关县| 乌兰县| 南郑县| 千阳县| 三亚市| 张掖市| 平塘县| 泽普县| 太康县| 棋牌| 宝兴县| 闵行区| 游戏| 雷州市|