Python中怎么進行單元測試


既然是測試,那我們得有被測試的代碼,我們先定義一個簡單的函數,這個函數的功能就是接收一個姓名,並返回一句問候語句。

say_hello_function.py

1 def hello_name(name):
2     greet = "Hello , "
3     return greet + name.title()

顯然,關於單元測試Python也給我們提供了相應的模塊(unittest),單元測試:用於確定函數的某方面沒有問題;測試用例:即一組單元測試,在各個情況下的行為都符合我們的預期。

一、成功通過的測試

編寫測試用例的步驟:1.先導入unittest模塊;2.創建一個類(任意名)繼承unittest.TestCase;3.編寫需要測試的代碼對函數進行各方面的測試。我們先只用上面一個函數舉例即只包含一個方法的測試用例,主要檢查函數hello_name 運行之后是否符合我們的預期。

test_say_hello.py

 

 1 #coding=gbk  //因為本人用的編輯器編碼為GBK,所以需要加這一行,如果你的是utf-8,將gbk改為utf-8即可(主要是為了讓Python能識別注釋與字符串中的中文字符)
 2 import unittest
 3 
 4 from say_hello_function import hello_name
 5 
 6 class HelloTest(unittest.TestCase):
 7     """用於測試say_hello_function.py"""
 8     def test_hello_name(self):
 9         """是否能正確處理Joker 這個名字"""
10         hello_str = hello_name('Joker')
11         self.assertEqual(hello_str,'Hello , Joker')
12         
13 unittest.main()

 

解釋:國際慣例,先導入unittest模塊,以及欲測試的函數hello_name(),第6行代碼中,我們創建了一個名為HelloTest的類且繼承了unittest.TestCase類,雖然這個類名你可以隨便取,但最好讓人見名知意,比如我所取的類名中包含Test,讓人很簡單的知道這是個測試類,繼承unittest.TestCase類 這是必須的不能隨意,因為這樣Python才會知道如何運行你編寫的測試。

這個類只包含一個方法,用於測試hello_name()函數的一個方面。我們給方法命令為test_hello_name(),誒,這個方法名不能隨意取,必須得以test_ 開頭,這樣Python才能在運行的時候運行所有的以test_開頭的方法。

第10 行我們調用了hello_name()函數 並將函數返回的結果存儲到變量hello_str 中,我們在第11 行代碼中,使用了unittest中最為有用的方法之一:斷言方法。斷言顯而易見,就是用來核實得到的結果是否與我們預期的一致。在這里我們知道hello_name()函數返回 Hello +,(逗號) + 名字(且首字母大寫),單詞與符號之間都有一個空格,因此我們所預期的是“Hello , Joker”,為了驗證我們所想,我們即調用unnittest的方法assertEqual() 並向它傳遞兩個參數 hello_str 和 “Hello , Joker ”,將hello_str 的值與后者字符串進行比較,如果相等,就相安無事,而如果不相等,事兒就大了。

我們運行該測試,控制台打印如下:

第一行有一個點,表示有一個測試通過了,虛線下面的一行表示,Python運行了一個測試,所消耗時間不到0.001秒,而最后一行的OK 則表示所有的用例都通過了。綜上,在給函數hello_name() 傳入一個名字為“Joker”時,該函數總能正確處理。修改該函數后,再次運行這個測試用例,如果它通過了,我們就知道在給定Joker這個名字時,這個函數還是可以正確處理。

 

  未完待續......  

 

  你以為有錢人他們很快樂嗎?對的,他們的快樂,你想象不到。

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM