單元測(cè)試?yán)铮瑪?shù)據(jù)都是模擬的,有什么意義呢?
- 首先單元測(cè)試區(qū)別于其他測(cè)試,最重要的一點(diǎn)就是快速
- 提供必要的參數(shù)環(huán)境。單元測(cè)試顧名思義就是一個(gè)個(gè)很小的單元,其數(shù)據(jù)大多都是外界提供的
- 模擬數(shù)據(jù),保證了在當(dāng)前提供的數(shù)據(jù)環(huán)境下,測(cè)試pass。后期的業(yè)務(wù)改動(dòng)有沒(méi)有影響到之前的測(cè)試用例,跑一下就能看出來(lái)。
- 在構(gòu)造模擬數(shù)據(jù)的時(shí)候,順帶就能想到邊界情況下業(yè)務(wù)邏輯是否能夠正常運(yùn)行不奔潰,再輔以測(cè)試用例來(lái)cover。即測(cè)試驅(qū)動(dòng)開(kāi)發(fā)TDD。
業(yè)務(wù)單元測(cè)試中,為什么mock接口請(qǐng)求,mock的假數(shù)據(jù)有什么意義?
- 還是說(shuō)到單元測(cè)試這個(gè)名字的含義。單元測(cè)試的目的是保證測(cè)試單元的正常運(yùn)行。接口請(qǐng)求對(duì)于業(yè)務(wù)測(cè)試來(lái)說(shuō),只是其下的一個(gè)單元,測(cè)試職責(zé)在接口單元測(cè)試?yán)锟紤]
- 真實(shí)請(qǐng)求,參數(shù)構(gòu)造困難,像token之類經(jīng)常變動(dòng)的。且請(qǐng)求受網(wǎng)絡(luò)環(huán)境影響大,容易導(dǎo)致測(cè)試失敗,但是此時(shí)并非是代碼問(wèn)題。
- 接口請(qǐng)求一般都是封裝在單獨(dú)工具類里,測(cè)試業(yè)務(wù)模塊時(shí),jest測(cè)試環(huán)境是沒(méi)法知道網(wǎng)絡(luò)請(qǐng)求啥時(shí)候結(jié)束的。就算是通過(guò)async/await,也是需要測(cè)試模塊的單元測(cè)試?yán)铮苣玫骄W(wǎng)絡(luò)請(qǐng)求節(jié)點(diǎn)(一般都拿不到的)。
單元測(cè)試能帶來(lái)什么好處,以及缺點(diǎn)是什么?
優(yōu)點(diǎn)
- 保證單元測(cè)試覆蓋的業(yè)務(wù)邏輯,在后續(xù)的需求迭代中不會(huì)出現(xiàn)意外情況
- 提升業(yè)務(wù)開(kāi)發(fā)思維,優(yōu)化代碼結(jié)構(gòu),增加代碼穩(wěn)定性
- 每次發(fā)版前,一行命令執(zhí)行所有單元測(cè)試,執(zhí)行時(shí)間也就幾秒到幾十秒(視單元測(cè)試數(shù)量)。提前獲知異常情況。
缺點(diǎn)
- 無(wú)法做到端到端(E2E)測(cè)試那樣模擬真實(shí)的用戶環(huán)境
- 測(cè)試用例覆蓋率,不能完全表示測(cè)試用例的覆蓋程度,此問(wèn)題很大程度取決于寫(xiě)測(cè)試用例的人。
- 用例編寫(xiě)耗時(shí)耗力,很多條件語(yǔ)句的測(cè)試存在大量重復(fù)編碼