前言:
編寫函數或者類時,需要編寫測試代碼,來保證其的功能運行是否按預期的那樣工作。在程序添加新的代碼時,用來測試是否會破壞本身的功能。
我們使用python自帶的unittest模塊來測試代碼。
編寫函數:
def get_formatted_name(first,last,middle=''): """生成整潔的姓名""" if middle: full_name = first + ' '+ middle +' '+ last else: full_name = first + ' ' + last return full_name.title()
編寫測試:
import unittest from name_function import get_formatted_name class NameTestCase(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') def test_first_last_middle_name(self): """能夠正確地處理像Wolfgang Amadeus Mozart這樣的姓名嗎?""" formatted_name = get_formatted_name('wolfgang','mozart','amadeus') self.assertEqual(formatted_name,'Wolfgang Amadeus Mozart') unittest.main()
編寫類:
class AnonymousSurvey(): """收集匿名調查問卷的答案""" def __init__(self, question): """存儲一個問題,並為存儲答案做准備""" self.question = question self.responses = [] def show_question(self): """顯示調查問卷""" print(self.question) def store_response(self, new_response): """存儲單份調查答卷""" self.responses.append(new_response) def show_results(self): """顯示收集到的所有答卷""" print("Survey results") for response in self.responses: print('- '+ response)
編寫測試:
import unittest from survey import AnonymousSurvey class TestAnonymousSurvey(unittest.TestCase): """針對AnonymousSurvey類的測試""" def test_store_single_response(self): """測試三個答案會被妥善地存儲""" question = "What language did you first learn to speak?" my_survey = AnonymousSurvey(question) lists = ['English','China','Japanese'] for s in lists: my_survey.store_response(s) self.assertIn(s, my_survey.responses) unittest.main()
總結:
unittest模塊不僅支持單元測試,在接口和功能測試也能直接套用其中的方法。編寫unittest必須添加繼承unittest.TestCase類,測試的函數必須以test*開頭,以及使用unittest.mian方法來運行此測試模塊。