Python入門之測(cè)試代碼

編寫函數(shù)或類時(shí),還可以為其編寫測(cè)試。通過測(cè)試,可確定代碼面對(duì)各種輸入都能夠按要求的那樣工作。程序員都會(huì)犯錯(cuò),因?yàn)槊總€(gè)程序員都必須經(jīng)常測(cè)試其代碼,在用戶發(fā)現(xiàn)問題前找出它們。

測(cè)試函數(shù)

被測(cè)試的代碼,下面是一個(gè)簡單的函數(shù)name_function.py,它接受名和姓返回整潔的姓名:

def get_formatted_name(first, last):
    """接受名和姓返回整潔的姓名"""
    full_name = first + " " + last
    return full_name.title()

再編寫一個(gè)使用這個(gè)函數(shù)的程序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 + ".")

單元測(cè)試和測(cè)試用例

Python標(biāo)準(zhǔn)庫中的模塊unittest提供了代碼測(cè)試工具。
單元測(cè)試用于核實(shí)函數(shù)的某個(gè)防霾呢沒有問題;
測(cè)試用例是一組單元測(cè)試,這些單元測(cè)試儀器一起核實(shí)函數(shù)在各種情形下的行為都符合要求。良好的測(cè)試用例考慮到了函數(shù)可能收到的各種收入,包含所有針對(duì)這些情形的測(cè)試。
全覆蓋式測(cè)試用例包含一整套單元測(cè)試,涵蓋了各種可能的函數(shù)使用方式。
對(duì)于大型項(xiàng)目,要實(shí)現(xiàn)全覆蓋可能很難。通常,最初只要對(duì)針對(duì)代碼的重要行為編寫測(cè)試即可,等項(xiàng)目給廣泛使用時(shí)再考慮全覆蓋。

可通過的測(cè)試

創(chuàng)建測(cè)試用例的語法需要一段時(shí)間才能習(xí)慣,但測(cè)試用例創(chuàng)建后,再添加針對(duì)函數(shù)的單元測(cè)試就很簡單了。要為函數(shù)編寫測(cè)試用例,可先導(dǎo)入模塊unittest以及要測(cè)試的函數(shù),在創(chuàng)建一個(gè)繼承unittest.TestCase的類,并編寫一系列方法對(duì)函數(shù)行為的不同方面進(jìn)行測(cè)試。

下面test_name_function.py一個(gè)只包含一個(gè)方法的測(cè)試用例,它檢查函數(shù)get_formatted_name()在給定名和姓時(shí)能否正確的工作。

import unittest
from name_function import get_formatted_name

class NamesTestCase(unittest.TestCase):
    """測(cè)試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): 核實(shí)a=b
  • assertNotEqual(a,b): 核實(shí)a!=b
  • assertTrue(x): 核實(shí)x為True
  • assertFalse(x): 核實(shí)x為False
  • assertIn(item, list): 核實(shí)item在list中
  • assertNotIn(item, list): 核實(shí)item不在list中
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容