一個Python單元測試的例子

Eric書中《Python編程從入門到實踐中的一個例子》。

首先定義了一個測試函數:

  • namefunction.py
#-*- coding:cp936 -*-
def get_formmed_name(first, last):
    """該函數根據姓和名生成一個完整的姓名"""

    full_name = first + ' ' + last
    return full_name.title()

然後編寫了一個測試該函數的模塊:

  • names.py
#-*- coding:cp936 -*-
from name_function import get_formmed_name
"""該文件用來測試姓名生成函數"""

print "Enter 'q' to quit any time."

while True:
    first = raw_input("\nEnter first name:")
    if first == 'q':
        break
    last = raw_input("Enter last name:")
    if last == 'q':
        break
    formatted_name = get_formmed_name(first,last)
    print "Formmated name:",formatted_name

通過測試,name_function中的函數可以實現其功能。

最後是單元測試和測試用例的編寫。

  • test_name_function.py
# coding:utf-8

import unittest
from name_function import get_formmed_name

class NamesTestCase(unittest.TestCase):
    """測試name_function.py"""

    def test_first_last_name(self):
        """能夠正確處理像Janis Joplin這樣的姓名嗎?"""
        formatted_name = get_formmed_name('janis','joplin')
        self.assertEqual(formatted_name,'Janis Joplin')


#注意這個地方,我在Python 2.7的版本中直接調用書上的主函數unittest.main()時程序無法通過,而改用以下調用方式即可

if __name__ == '__main__':
    unittest

通過對以上單元測試模塊分析:

  1. 導入單元測試類unittest
  2. 導入要測試的函數,本例爲name_function模塊中的get_formatted_name() 函數
  3. 創建一個繼承於unittest.TestCase的類
  4. 在類中定義一系列方法對函數的行爲進行不同方面的測試,需要注意的是一個測試用例應該只測試一個方面,測試目的和測試內容應很明確。主要是調用assertEqual、assertRaises等斷言方法判斷程序執行結果和預期值是否相符。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章