Python學習之路10-測試代碼

if語句下面的代碼相當於對上面的函數的測試,不過這樣的測試每次都需要我們自己輸入數據,並自己根據結果判斷代碼是否工作正常,如果代碼稍微多一點,稍微複雜一點,這樣的測試方法將會很繁瑣,所以,我們使用

unittest模塊了測試代碼。

Python學習之路10-測試代碼

這裡先明確兩個概念:

單元測試:用於核實函數在某個方面沒有問題

測試用例:一組單元測試,這些單元測試一起核實函數在各種情況下的行為都符合要求。

也就是說,你可以將上述代碼中的test_first_last_name看做單元測試,而將NamesTestCase看做測試用例。

一般測試文件單獨放在一個文件夾中,也可以將測試都放在一個文件中。

為函數編寫測試用例,可先導入unittest模塊和要測試的函數,再創建一個繼承unittest.TestCase的類,並編寫一系列方法對函數行為的不同方面進行測試。在測試用,我們使用斷言self.assertEqual()(並不是只有這一個斷言函數)來判斷結果與期望是否相同。在測試類中的每一個測試方法都必須以

test_ 開頭,否則將不會被認定是一個單元測試。最後我們通過unittest.main()來運行這個文件中的所有測試。當測試通過時,結果中會先輸出一個實心句點,輸出幾個句點表示通過了幾個單元測試,然後輸出單元測試數目,最後輸出”OK”。

一個不能通過的測試

外國人的名字還有中間名,以上代碼並未考慮這個情況。我們通過將上述代碼改成含有中間名的版本來演示測試不通過的情況:

Python學習之路10-測試代碼

第一行輸出了一個字母E,traceback指出缺少了參數。如果你檢查的條件沒錯,測試通過了意味著函數的行為是對的,而測試未通過意味著你編寫的新代碼有錯。因此,測試未通過時,不是去修改測試代碼,而失去修改你編寫的代碼。

添加新測試

以下我們將上述的get_formatted_name()函數修改為能自動處理中間名的函數,並在測試文件中添加一個單元測試:

Python學習之路10-測試代碼

對類進行測試

前面講的都是對函數的測試,這裡我們開始對類的測試。在測試之前,先介紹幾種常用的斷言方法:

Python學習之路10-測試代碼

下面創建一個匿名調查類:

Python學習之路10-測試代碼

以下是對該類的測試代碼:

Python學習之路10-測試代碼

至此,Python的基礎部分大致結束,後面將是項目部分,以後可能還會對基礎部分進行補充。


分享到:


相關文章: