Python測(cè)試 | 在python中創(chuàng)建單元測(cè)試
作為開(kāi)發(fā)人員或程序員, 只要編寫(xiě)代碼,通常就會(huì)忽略一件事:測(cè)試。測(cè)試是開(kāi)發(fā)的一部分,您應(yīng)該嚴(yán)格測(cè)試應(yīng)用程序,以確保它們滿足必需的功能。
讓我們先從為什么要做測(cè)試開(kāi)始:
1、減少手動(dòng)測(cè)試的需求
因?yàn)闇y(cè)試用例是預(yù)先編寫(xiě)的,所以沒(méi)有真正的理由再進(jìn)行手動(dòng)測(cè)試。大多數(shù)時(shí)候,特別是對(duì)于大型應(yīng)用程序,您必須在軟件中運(yùn)行許多階段,以測(cè)試某個(gè)特性是否有效。這可以通過(guò)測(cè)試來(lái)避免。想象一下每次運(yùn)行應(yīng)用程序時(shí)必須使用特定的輸入。通過(guò)測(cè)試,這將在每次運(yùn)行時(shí)自動(dòng)輸入。
2、允許更好的代碼結(jié)構(gòu)
在開(kāi)發(fā)之前創(chuàng)建測(cè)試用例是最佳實(shí)踐。這迫使您在開(kāi)始開(kāi)發(fā)之前將系統(tǒng)作為一個(gè)整體來(lái)考慮。
3、允許在長(zhǎng)期運(yùn)行中更快的測(cè)試
在編碼時(shí),函數(shù)的實(shí)現(xiàn)可以改變,但是輸出保持不變。您可以簡(jiǎn)單地實(shí)現(xiàn)可以一次運(yùn)行多個(gè)測(cè)試用例的特定測(cè)試用例,而不是在函數(shù)的實(shí)現(xiàn)更改時(shí)手動(dòng)測(cè)試它。
開(kāi)始
我們將專(zhuān)注于一種特定類(lèi)型的測(cè)試,即單元測(cè)試。這種特定類(lèi)型的測(cè)試用于測(cè)試小的代碼單元,比如函數(shù)或類(lèi)。
為了創(chuàng)建單元測(cè)試,我們將使用python標(biāo)準(zhǔn)庫(kù)unittest。通過(guò)創(chuàng)建一個(gè)包含所有測(cè)試用例的類(lèi),這種創(chuàng)建測(cè)試用例的方法使用OOP(面向?qū)ο缶幊?。這將允許我們一次運(yùn)行類(lèi)中的所有測(cè)試用例。
注意:您可以使用您熟悉的任何IDE或文本編輯器(可以使用默認(rèn)的python IDE)。為此,我將演示使用帶有python擴(kuò)展的Visual Studio代碼。
我們將首先導(dǎo)入我們的單元測(cè)試庫(kù):
現(xiàn)在做我們的類(lèi)聲明:
注意(unittest.TestCase)在python中是繼承。給類(lèi)提供功能。
在類(lèi)中添加第一個(gè)函數(shù):
self.assertEqual 是由先前繼承的類(lèi)(unittest.TestCase)提供的方法。此方法測(cè)試兩個(gè)變量是否具有相同的值。
添加我們的測(cè)試運(yùn)行器。這就是讓我們的單元測(cè)試運(yùn)行的原因:
這是完成的代碼應(yīng)該看起來(lái)像:
上面的代碼演示了測(cè)試9 + 1是否等于11。如果你懂基礎(chǔ)數(shù)學(xué),你應(yīng)該知道9+1 = 10。因此,這個(gè)測(cè)試用例將失敗。
輸出:
你應(yīng)該已經(jīng)猜到了。失敗!
解決辦法很簡(jiǎn)單。修改代碼為:
輸出:
測(cè)試外部功能
對(duì)于在函數(shù)外部進(jìn)行測(cè)試,前面的示例可能不現(xiàn)實(shí)。讓我們將test_var值替換為來(lái)自一個(gè)函數(shù)的值。我們將在文件的頂部添加一個(gè)函數(shù)聲明。
這個(gè)函數(shù)將兩個(gè)數(shù)相加。用函數(shù)調(diào)用add(9,2)替換9 + 2,然后運(yùn)行代碼。
到目前為止,我們只實(shí)現(xiàn)了一個(gè)測(cè)試用例。TestingClass中的每個(gè)函數(shù)/方法(在本例中兩者是相同的)代表一個(gè)測(cè)試用例。
讓我們添加另一個(gè)測(cè)試用例test_multiple_num_addition。
注意:所有創(chuàng)建的測(cè)試用例的名稱(chēng)之前都應(yīng)該加上單詞“test”,否則測(cè)試運(yùn)行程序?qū)o(wú)法識(shí)別它。
你的代碼應(yīng)該如下所示:
運(yùn)行:
這顯然會(huì)失敗,因?yàn)楹瘮?shù)參數(shù)只接受兩個(gè)參數(shù)。但如果我們真的想加更多的數(shù)字呢?
這可以通過(guò)對(duì)add函數(shù)做一個(gè)改變來(lái)解決:
注意values參數(shù)左邊的星號(hào)(*)。這允許您輸入多個(gè)參數(shù),并允許將值存儲(chǔ)為元組。
執(zhí)行前的代碼:
執(zhí)行:
執(zhí)行成功!
在函數(shù)參數(shù)的變量前加星號(hào)稱(chēng)為非關(guān)鍵字參數(shù)。
總結(jié)
嘗試測(cè)試可能會(huì)給代碼帶來(lái)額外的健壯性。它還可以改變您進(jìn)行開(kāi)發(fā)的方式。擁有測(cè)試思維可以確保在生產(chǎn)中有更少的錯(cuò)誤,以及在開(kāi)發(fā)過(guò)程中更少的重復(fù)性手工測(cè)試。
*原文鏈接:https://medium.com/swlh/python-testing-a8156d022eef