Python利用doctest模塊進(jìn)行文檔測試

Python 利用doctest模塊進(jìn)行文檔測試?針對這個問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供岱山網(wǎng)站建設(shè)、岱山做網(wǎng)站、岱山網(wǎng)站設(shè)計(jì)、岱山網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)與制作、岱山企業(yè)網(wǎng)站模板建站服務(wù),十年岱山做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。

所謂文檔測試,指的是通過 doctest 模塊運(yùn)行 Python 源文件的說明文檔中的測試用例,從而生成測試報(bào)告。

前面在查看 Python 的模塊文檔時,經(jīng)常會看到如下信息:

>>>os.path.commonprefix (['/usr/lib','/usr/local/lib'])
'/usr/1'
>>>os.path.commonpath(['/usr/lib', '/usr/local/lib'])
'/usr'

用戶完全可以將這些代碼拷貝到 Python 的交互式解釋器中運(yùn)行,然后可以看到運(yùn)行結(jié)果與文檔中示例代碼的輸出結(jié)果完全一致。

上面的說明就是文檔測試的注釋,文檔測試工具可以提取說明文檔中的測試用例,其中“>>>”之后的內(nèi)容表示測試用例,接下來的一行則代表該測試用例的輸出結(jié)果。文檔測試工具會判斷測試用例的運(yùn)行結(jié)果與輸出結(jié)果是否一致,如果不一致就會顯示錯誤信息。

現(xiàn)在定義一個簡單的模塊,該模塊包含一個函數(shù)和一個類,程序?yàn)樵摵瘮?shù)和該類提供了說明文檔,該文檔中包含了測試用例。程序代碼如下:

def square (x):
    '''
    一個用于計(jì)算平方的函數(shù)

    例如
    >>> square(2)
    4
    >>> square(3)
    9
    >>> square(-3)
    9
    >>> square(0)
    0
    '''
    return x * 2 # ①、故意寫錯的

class User:
    '''
    定義一個代表用戶的類,該類包含如下兩個屬性:
    name - 代表用戶的名字
    age - 代表用戶的年齡

    例如
    >>> u = User('fkjava', 9)
    >>> u.name
    'fkjava'
    >>> u.age
    9
    >>> u.say('i love python')
    'fkjava說: i love python'
    '''
    def __init__(self, name, age):
        self.name = 'fkit' # ②、故意寫錯的
        self.age = age
    def say(self, content):
        return self.name + '說: ' + content
if __name__=='__main__':
    import doctest
    doctest.testmod()

上面第一段注釋代碼就是程序?yàn)?square() 函數(shù)提供的測試用例,在文檔中一共為該函數(shù)提供了 4 個測試用例;第二段注釋代碼是程序?yàn)?User 類提供的測試用例,在文檔中一共為該類提供了 3 個測試用例,分別用于測試用戶的 name 、age 和 say() 方法。

程序最后幾行代碼進(jìn)行了判斷,如果是直接使用 python 命令來運(yùn)行該程序(__name__ 等于 __main__),程序?qū)?dǎo)入 doctest 模塊,并調(diào)用該模塊的 testmod() 函數(shù)。

從上面程序可以看到,Python 為文檔測試提供了 doctest 模塊,該模塊的用法非常簡單,程序只要調(diào)用該模塊的 testmod() 函數(shù)即可。

運(yùn)行上面程序,可以看到如下輸出結(jié)果:

**********************************************************************
File "C:\Users\mengma\Desktop\1.py", line 25, in __main__.User
Failed example:
    u.name
Expected:
    'fkjava'
Got:
    'fkit'
**********************************************************************
File "C:\Users\mengma\Desktop\1.py", line 29, in __main__.User
Failed example:
    u.say('i love python')
Expected:
    'fkjava說: i love python'
Got:
    'fkit說: i love python'
**********************************************************************
File "C:\Users\mengma\Desktop\1.py", line 8, in __main__.square
Failed example:
    square(3)
Expected:
    9
Got:
    6
**********************************************************************
File "C:\Users\mengma\Desktop\1.py", line 10, in __main__.square
Failed example:
    square(-3)
Expected:
    9
Got:
    -6
**********************************************************************
2 items had failures:
   2 of   4 in __main__.User
   2 of   4 in __main__.square
***Test Failed*** 4 failures.

從上面的輸出結(jié)果可以看出,一共有 4 個測試沒有通過,在 User 類中有兩個測試沒有通過,在 square() 函數(shù)中有兩個測試沒有通過。這是因?yàn)樯厦娉绦蛑?① ② 兩行代碼故意寫錯了,其中 ① 號代碼用于計(jì)算 x 的平方,應(yīng)該寫成 x**2,但漏寫了一個星號;② 號代碼則應(yīng)該用傳入的 name 參數(shù)對 self.name 賦值。

上面顯示的測試輸出結(jié)果也很清晰,每個測試用例結(jié)果都包含如下 4 部分:

第一部分:顯示在哪個源文件的哪一行。

第二部分:Failed example,顯示是哪個測試用例出錯了。

第三部分:Expected,顯示程序期望的輸出結(jié)果。也就是在“>>>命令”的下一行給出的運(yùn)行結(jié)果,它就是期望結(jié)果。

第四部分:Got,顯示程序?qū)嶋H運(yùn)行產(chǎn)生的輸出結(jié)果。只有當(dāng)實(shí)際運(yùn)行產(chǎn)生的輸出結(jié)果與期望結(jié)果一致時,才表明該測試用例通過。

將上面程序中 ① ② 兩行代碼修改正確,再次使用 python 命令來運(yùn)行程序,將看不到任何輸出結(jié)果,說明文檔測試中的所有測試用例都通過了。

由此可見,Python 為文檔注釋提供了 doctest 模塊,該模塊的用法非常簡單,程序只要導(dǎo)入該模塊,并調(diào)用該模塊的 testmod() 函數(shù)即可。testmod() 函數(shù)會自動提取該模塊的說明文檔中的測試用例,并執(zhí)行這些測試用例,最終生成測試報(bào)告。如果存在沒有通過的測試用例,程序就會顯示有多少個測試用例沒有通過;如果所有測試用例都能通過測試,則不生成任何輸出結(jié)果。

關(guān)于Python 利用doctest模塊進(jìn)行文檔測試問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識。

分享名稱:Python利用doctest模塊進(jìn)行文檔測試
分享網(wǎng)址:http://muchs.cn/article36/jcjdpg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、網(wǎng)站維護(hù)定制開發(fā)、品牌網(wǎng)站制作、軟件開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)