在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Python  網(wǎng)絡(luò)安全/ doctest 如何測試錯(cuò)誤捕獲情況

doctest 如何測試錯(cuò)誤捕獲情況

文檔測試:就是在代碼里用注釋的方式 加入測試代碼。
比如:obj.attr1 是一個(gè)不存在屬性,應(yīng)該報(bào)錯(cuò)。
我如何用文檔測試方法測試判斷:執(zhí)行 obj.attr1 時(shí)確實(shí)如預(yù)期報(bào)錯(cuò),或者合理的捕獲了錯(cuò)誤。
也就是說我要測試的不是“得到正確的結(jié)果” 而是“得到正確的報(bào)錯(cuò)”

以下是案例:

已下代碼中 Dict 類用途只是讓字典可以通過屬性的方式訪問如 dict.attr
下面的文檔測試代碼,做了相應(yīng)的測試。
文檔測試的最后一行
》》》 d.f 訪問了一個(gè)不存在的屬性,我如何利用文檔測試,可以測試程序中正確捕獲了這個(gè)錯(cuò)誤。
或者說:測試 d.f 拋出了預(yù)期的異常。把錯(cuò)誤棧堆到這里總不好吧?

class Dict(dict):
    ''' 
    >>> d = Dict(a=1,b='bb',c='cc')
    >>> d.b
    'bb'
    >>> d.d = "ddd"
    >>> d.d
    'ddd'
    >>> d.f
    '''
    def __init__(self, **kw):
        super().__init__(**kw)

    def __getattr__(self, key):
        try:
            return self[key]
        except KeyError:
            raise AttributeError(r"'Dict' object has no attribute '%s'" % key)

    def __setattr__(self, key, value):
        self[key] = value   # 給 對象增加屬性。給用屬性的方式來訪問。
        #self.key = value

if __name__=='__main__':
    import doctest
    doctest.testmod()
回答
編輯回答
雅痞

自問自答:

    >>> d2['empty']
    Traceback (most recent call last):
        ...
    KeyError: 'empty'
    >>> d2.empty
    Traceback (most recent call last):
        ...
    AttributeError: 'Dict' object has no attribute 'empty'
    

按照上面的編寫方式即可。也就是錯(cuò)誤的第一行輸出 ... 最后一行輸出 寫上即可。注意不能多或者少任何字符。

2018年7月14日 04:57