說說在 Python 中如何測試函數

Python 標準庫中的 unittest 模塊,提供了代碼測試功能 。咱們能夠經過單元測試來驗證所定義的函數是否符合預期。 一個函數通常會定義一組的單元測試(也叫作測試用例), 經過這些測試用例來判斷該函數在各類邊界條件下,函數的行爲是否符合預期 。大型項目中要作到全覆蓋測試比較困難,因此在最初階段,只會針對代碼的重要行爲來編寫測試用例。 然後,在項目的發展過程當中,再逐步完善測試用例。bash

1 第一個單元測試

假設有這樣的一個函數,它會返回格式化後的待讀信息:函數

def to_read(book_name):
    '''想讀的書'''
    return '我想讀《' + book_name + '》咯'
複製代碼

如今建立一個單元測試:單元測試

import unittest
from book_function import to_read


class BookTestCase(unittest.TestCase):
    '''測試 book_function.py'''
    
    def test_read(self):
        '''測試 read 函數'''
        result = to_read('現代藝術150年 : 一個未完成的故事')
        self.assertEqual(result, '我想讀《現代藝術150年 : 一個未完成的故事》咯')

if __name__ == '__main__':
    unittest.main()
    
複製代碼
  • 單元測試類必須繼承自 unittest.TestCase 類, 這樣 Python 纔會運行咱們編寫的測試邏輯。
  • 在此,使用了 unittest 類的斷言方法 assertEqual。經過斷言方法,咱們就能夠斷定結果是否與指望結果相一致。

運行結果:測試

2 測試不經過

假設 to_read() 函數須要擴展,加入一個 book_type 參數,用於定義該書所歸屬的領域:ui

def to_read(book_name, book_type):
    '''想讀的書'''
    content = '我想讀《' + book_name + '》咯,'
    content += '它屬於' + book_type + '領域'
    return content

複製代碼

這時,若是再次運行以前編寫好的單元測試用例,就會拋出異常:spa

  • 第一行 FAILED,表示沒有徹底經過測試,errors 指出了出錯個數。
  • 測試用例通常會包含多個單元測試,因此咱們能夠經過 Traceback 找到出錯的單元測試,精確到行數。

發生測試不經過現象時,首先要作的是冷靜,經過 Traceback ,找到問題所在,修改函數或者單元測試代碼,以符合預期行爲。3d

在這個示例中,咱們嘗試修改單元測試代碼:code

def test_read(self):
	'''測試 read 函數'''
	result = to_read('現代藝術150年 : 一個未完成的故事','藝術')
	self.assertEqual(result, '我想讀《現代藝術150年 : 一個未完成的故事》咯,它屬於藝術領域')
複製代碼

是否是測試經過啦 O(∩_∩)O哈哈~cdn

相關文章
相關標籤/搜索