對(duì)Python測試套件進(jìn)行介紹分析
Python測試套件具有腳本語言中最豐富和強(qiáng)大的類庫,足以支持絕大多數(shù)日常應(yīng)用。它的名字來源于一個(gè)喜劇,也許最初設(shè)計(jì)Python這種語言的人并沒有想到今天Python會(huì)在工業(yè)和科研上獲得如此廣泛的使用。
在比較長的文檔中,由三個(gè)大于號(hào)組成的 Python 提示符 >>> 是一個(gè)非常明顯的標(biāo)志,它表示在 Python 提示上應(yīng)該發(fā)生什么。正如在本系列的***篇文章中看到的,這可以出現(xiàn)在作為文檔的單獨(dú)的文本文件中:
- Doctest for truth and falsehood
- -------------------------------
- The truth values in Python, named "True" and "False",
- are equivalent to the Boolean numbers one and zero.
- >>> True == 1
- True
- >>> False == 0
- True
這種說明還可以出現(xiàn)在源代碼中模塊、類或函數(shù)的 docstring 中:
- def count_vowels(s):
- """Count the number of vowels in a string.
- >>> count_vowels('aardvark')
- 3
- >>> count_vowels('THX')
- 0
- """
- return len( c for c in s if c in 'aeiou')
當(dāng)這些測試出現(xiàn)在文本文件中時(shí)(比如***個(gè)示例),文件就被稱為 docfile。當(dāng)它們出現(xiàn)在 Python 源代碼中的 docstring 中時(shí)(比如第二個(gè)示例),它們就被稱為 doctest。因?yàn)?docfile 和 doctest 是編寫作為測試使用的文檔的常用方法(而且這也能夠表明文檔什么時(shí)候過時(shí)了),所以 py.test 和 nose 直接支持它們。
(zope.testing 的用戶必須使用標(biāo)準(zhǔn) doctest 模塊中的 DocTestSuite 類為每個(gè)文件手工創(chuàng)建 Python 測試用例)。與用于尋找測試模塊的規(guī)則一樣,py.test 框架采用固定的過程支持 doctest,無法進(jìn)行配置,這在項(xiàng)目之間實(shí)現(xiàn)標(biāo)準(zhǔn)化,但是限制了項(xiàng)目的靈活性。
如果啟用了它的Python測試套件,它就會(huì)在所有 Python 模塊(包括模塊名中不包含 test 的模塊)的文檔字符串中以及以 test_ 開頭和以 .txt 擴(kuò)展名結(jié)尾的所有文本文件中尋找 doctest。
如果啟用了它的 -p restdoc 插件,那么不但執(zhí)行 .txt 文件中的所有 doctest,py.test 還要求項(xiàng)目中的每個(gè) .txt 文件都是有效的 Restructured Text 文件。如果它們造成解析錯(cuò)誤,py.test 會(huì)發(fā)出警告。還可以通過命令行選項(xiàng)讓這個(gè)插件檢查文檔中指定的 URL,然后生成每個(gè) .txt 文本文件的 HTML 版本。
doctest-tests 是干擾最小的選項(xiàng),它只要求 nose 在已經(jīng)檢查的測試模塊的 docstring 中尋找 doctest。with-doctest 選項(xiàng)的影響比較大。它要求 nose 搜索所有一般模塊(不是測試但包含一般代碼的模塊),尋找并運(yùn)行它們的 docstring 中的 doctest。#t#
***,--doctest-extension 允許指定文件擴(kuò)展名(我認(rèn)識(shí)的大多數(shù)開發(fā)人員選擇 .txt、.rst 或 .doctest)。這要求 nose 讀取項(xiàng)目中具有指定的擴(kuò)展名的所有文本文件,運(yùn)行并檢查它找到的所有Python測試套件。
盡管 py.test 和 nose 在這方面的特性集非常相似,但是我更喜歡 nose 的方式。我喜歡對(duì)所有 Restructured Text 文件使用非標(biāo)準(zhǔn)的 .rst 擴(kuò)展名,這樣就可以讓文本編輯器能夠識(shí)別它們并對(duì)它們應(yīng)用特殊的語法突出顯示。
【編輯推薦】