Rust 編寫(xiě)自動(dòng)化測(cè)試

2023-03-22 15:06 更新
ch11-00-testing.md
commit 1fedfc4b96c2017f64ecfcf41a0a07e2e815f24f

Edsger W. Dijkstra 在其 1972 年的文章【謙卑的程序員】(“The Humble Programmer”)中說(shuō)到 “軟件測(cè)試是證明 bug 存在的有效方法,而證明其不存在時(shí)則顯得令人絕望的不足。”(“Program testing can be a very effective way to show the presence of bugs, but it is hopelessly inadequate for showing their absence.”)這并不意味著我們不該盡可能地測(cè)試軟件!

程序的正確性意味著代碼如我們期望的那樣運(yùn)行。Rust 是一個(gè)相當(dāng)注重正確性的編程語(yǔ)言,不過(guò)正確性是一個(gè)難以證明的復(fù)雜主題。Rust 的類(lèi)型系統(tǒng)在此問(wèn)題上下了很大的功夫,不過(guò)它不可能捕獲所有種類(lèi)的錯(cuò)誤。為此,Rust 也在語(yǔ)言本身包含了編寫(xiě)軟件測(cè)試的支持。

例如,我們可以編寫(xiě)一個(gè)叫做 add_two 的將傳遞給它的值加二的函數(shù)。它的簽名有一個(gè)整型參數(shù)并返回一個(gè)整型值。當(dāng)實(shí)現(xiàn)和編譯這個(gè)函數(shù)時(shí),Rust 會(huì)進(jìn)行所有目前我們已經(jīng)見(jiàn)過(guò)的類(lèi)型檢查和借用檢查,例如,這些檢查會(huì)確保我們不會(huì)傳遞 String 或無(wú)效的引用給這個(gè)函數(shù)。Rust 所 不能 檢查的是這個(gè)函數(shù)是否會(huì)準(zhǔn)確的完成我們期望的工作:返回參數(shù)加二后的值,而不是比如說(shuō)參數(shù)加 10 或減 50 的值!這也就是測(cè)試出場(chǎng)的地方。

我們可以編寫(xiě)測(cè)試斷言,比如說(shuō),當(dāng)傳遞 3 給 add_two 函數(shù)時(shí),返回值是 5。無(wú)論何時(shí)對(duì)代碼進(jìn)行修改,都可以運(yùn)行測(cè)試來(lái)確保任何現(xiàn)存的正確行為沒(méi)有被改變。

測(cè)試是一項(xiàng)復(fù)雜的技能:雖然不能在一個(gè)章節(jié)的篇幅中介紹如何編寫(xiě)好的測(cè)試的每個(gè)細(xì)節(jié),但我們還是會(huì)討論 Rust 測(cè)試功能的機(jī)制。我們會(huì)講到編寫(xiě)測(cè)試時(shí)會(huì)用到的注解和宏,運(yùn)行測(cè)試的默認(rèn)行為和選項(xiàng),以及如何將測(cè)試組織成單元測(cè)試和集成測(cè)試。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)