单元测试实践
“實(shí)踐出真知”。學(xué)習(xí)了這么多理論知識(shí)之后,本節(jié)課我們將帶領(lǐng)大家通過具體的代碼案例深度體會(huì)單元測(cè)試在真實(shí)生產(chǎn)環(huán)境下的應(yīng)用,包括Unittest簡(jiǎn)單應(yīng)用、Unittest復(fù)雜應(yīng)用、運(yùn)行測(cè)試集的用例三個(gè)方面。
Unittest簡(jiǎn)單應(yīng)用
如圖所示,這是一個(gè)要被測(cè)試的類,這個(gè)類代表了一個(gè)人,類中有一個(gè)函數(shù)為get_name(),作用是獲取這個(gè)人的名字。圍繞著這個(gè)函數(shù)首先想到的測(cè)試點(diǎn)就是函數(shù)能否正確輸出人名。因此就有了如下圖所示的單元測(cè)試代碼。
第一步,將使用到的unittest框架和所需要的函數(shù)導(dǎo)入。
第二步,針對(duì)被測(cè)試的函數(shù)寫一個(gè)測(cè)試類,這里要注意測(cè)試類必須繼承自u(píng)nittest和TestCase。
第三步,構(gòu)建實(shí)例化的函數(shù),可以理解為生成兩個(gè)人,一個(gè)叫張三,一個(gè)叫李四。
第四步,編寫一個(gè)用于測(cè)試的函數(shù),這里注意函數(shù)名必須是以test開頭。通過圖片里的代碼可以看到,通過使用assertEqual斷言來做相應(yīng)的測(cè)試,斷言中包括了兩部分,第一部分是預(yù)期,第二部分是實(shí)際的值。通過對(duì)兩個(gè)值的比較來完成測(cè)試。
Unittest復(fù)雜應(yīng)用
下面來看一個(gè)復(fù)雜的例子。如圖所示,這個(gè)被測(cè)試的類是一個(gè)公司。這個(gè)公司的信息包含了公司的名字、公司的老板、公司的員工數(shù)。在這個(gè)公司的類中設(shè)置了三個(gè)函數(shù),老板是誰、雇傭一個(gè)新員工、解雇一個(gè)員工。通過這些信息,可以想到的測(cè)試點(diǎn)有:
(1)who_is_boss()這個(gè)函數(shù)能夠正確的返回老板的姓名;
(2)使用hire()函數(shù)雇傭新人,公司的員工總數(shù)+1;
(3)使用hire()函數(shù)重復(fù)雇傭一個(gè)人,函數(shù)會(huì)報(bào)錯(cuò)或者公司員工數(shù)量不變;
(4)使用fire()函數(shù)解雇一個(gè)人,公司的員工總數(shù)-1;
(5)使用fire()函數(shù)解雇非公司的員工,函數(shù)會(huì)報(bào)錯(cuò)或者員工數(shù)量不變。
針對(duì)以上的幾個(gè)測(cè)試點(diǎn),可以編寫出相應(yīng)的測(cè)試類。
首先將所需要的類庫(kù)導(dǎo)入,并且測(cè)試類要繼承自u(píng)nittest和TestCase。然后使用setUpClass()函數(shù)構(gòu)建一個(gè)公司,設(shè)置老板的姓名和公司的名字。在這里設(shè)置了一個(gè)tearDown()清理函數(shù),是為了方便測(cè)試的時(shí)候?qū)T工全部清理掉。
通過圖片可以看到,下面的三個(gè)函數(shù)原理基本跟上一個(gè)案例相同,都是通過斷言來進(jìn)行測(cè)試。測(cè)試類編寫完成之后,需要運(yùn)行這個(gè)類進(jìn)行測(cè)試。如果需要執(zhí)行全部的測(cè)試用例,如圖所示,使用unittest.main()這個(gè)函數(shù)且不需要添加任何參數(shù)。執(zhí)行完成后會(huì)得到如下圖所示的結(jié)果,測(cè)試結(jié)果分為幾個(gè)部分:
第一部分的代碼展示的是執(zhí)行測(cè)試用例的結(jié)果,“.”說明測(cè)試用例執(zhí)行通過,“E”說明測(cè)試用例發(fā)生了特殊情況異常中斷,“F”說明測(cè)試用例執(zhí)行失敗。
第二部分則是打印的報(bào)錯(cuò)信息,當(dāng)出現(xiàn)“E”或者“F”的時(shí)候,系統(tǒng)會(huì)打印出異常中斷和執(zhí)行失敗的原因。
第三部分為統(tǒng)計(jì)信息,包括了共執(zhí)行了幾個(gè)測(cè)試用例,測(cè)試用例執(zhí)行共花費(fèi)了多少時(shí)間,測(cè)試用例執(zhí)行成功或失敗的數(shù)量。
運(yùn)行測(cè)試集的用例
在真實(shí)應(yīng)用過程中,可能會(huì)出現(xiàn)測(cè)試用例太多、執(zhí)行一輪測(cè)試用例花費(fèi)的時(shí)間太長(zhǎng)或者只想執(zhí)行部分測(cè)試用例的情況,在這些情況下,就需要使用測(cè)試集進(jìn)行測(cè)試。
上圖中是一個(gè)測(cè)試集函數(shù)的代碼,它包括了以下幾個(gè)部分:
→ 首先生成一個(gè)測(cè)試集。
→ 然后使用addTest()方法將測(cè)試用例加入到測(cè)試集中
最后編寫測(cè)試集返回語句。,
這樣就完成了一個(gè)測(cè)試集的構(gòu)建。在執(zhí)行測(cè)試集的時(shí)候,使用圖中的代碼,在unittest_main()中加入?yún)?shù),即可完成測(cè)試集的運(yùn)行。
以上就是有關(guān)于單元測(cè)試實(shí)踐的全部?jī)?nèi)容啦,希望通過案列的講解,你能對(duì)理論知識(shí)掌握的更加深刻!
點(diǎn)擊進(jìn)入獲得更多技術(shù)信息~~
總結(jié)
- 上一篇: Python单元测试最佳实践
- 下一篇: 代码检查规则:Java语言案例详解