編寫函數或類時,還可以為其編寫測試。通過測試,可確定代碼面對各種輸入都能夠按要求的那樣工作。程序員都會犯錯,因為每個程序員都必須經常測試其代碼,在用戶發(fā)現(xiàn)問題前找出它們。
測試函數
被測試的代碼,下面是一個簡單的函數name_function.py,它接受名和姓返回整潔的姓名:
def get_formatted_name(first, last):
"""接受名和姓返回整潔的姓名"""
full_name = first + " " + last
return full_name.title()
再編寫一個使用這個函數的程序names.py。讓用戶輸入名和姓,并顯示整潔的姓名:
from name_function import get_formatted_name
print("Enter 'q' at any time to quit")
while True:
first = input("\nPlease give me a first name: ")
if first == 'q':
break
last = input("Please give me a last name: ")
if last == 'q':
break
formatted_name = get_formatted_name(first, last)
print("\tNeatly formatted name: " + formatted_name + ".")
單元測試和測試用例
Python標準庫中的模塊unittest提供了代碼測試工具。
單元測試用于核實函數的某個防霾呢沒有問題;
測試用例是一組單元測試,這些單元測試儀器一起核實函數在各種情形下的行為都符合要求。良好的測試用例考慮到了函數可能收到的各種收入,包含所有針對這些情形的測試。
全覆蓋式測試用例包含一整套單元測試,涵蓋了各種可能的函數使用方式。
對于大型項目,要實現(xiàn)全覆蓋可能很難。通常,最初只要對針對代碼的重要行為編寫測試即可,等項目給廣泛使用時再考慮全覆蓋。
可通過的測試
創(chuàng)建測試用例的語法需要一段時間才能習慣,但測試用例創(chuàng)建后,再添加針對函數的單元測試就很簡單了。要為函數編寫測試用例,可先導入模塊unittest以及要測試的函數,在創(chuàng)建一個繼承unittest.TestCase的類,并編寫一系列方法對函數行為的不同方面進行測試。
下面test_name_function.py一個只包含一個方法的測試用例,它檢查函數get_formatted_name()在給定名和姓時能否正確的工作。
import unittest
from name_function import get_formatted_name
class NamesTestCase(unittest.TestCase):
"""測試name_function.py"""
def test_first_last_name(self):
"""能否正切的處理Janis Joplin這樣的姓名嗎?"""
formatted_name = get_formatted_name('janis', 'joplin')
self.assertEqual(formatted_name, 'Janis Joplin')
各種斷言方法
-
assertEqual(a,b): 核實a=b -
assertNotEqual(a,b): 核實a!=b -
assertTrue(x): 核實x為True -
assertFalse(x): 核實x為False -
assertIn(item, list): 核實item在list中 -
assertNotIn(item, list): 核實item不在list中