doctest 如何测试错误捕获情况

文档测试:就是在代码里用注释的方式 加入测试代码。
比如:obj.attr1 是一个不存在属性,应该报错。
我如何用文档测试方法测试判断:执行 obj.attr1 时确实如预期报错,或者合理的捕获了错误。
也就是说我要测试的不是“得到正确的结果” 而是“得到正确的报错”

以下是案例:

已下代码中 Dict 类用途只是让字典可以通过属性的方式访问如 dict.attr
下面的文档测试代码,做了相应的测试。
文档测试的最后一行
》》》 d.f 访问了一个不存在的属性,我如何利用文档测试,可以测试程序中正确捕获了这个错误。
或者说:测试 d.f 抛出了预期的异常。把错误栈堆到这里总不好吧?

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()
阅读 2k
1 个回答

自问自答:

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

按照上面的编写方式即可。也就是错误的第一行输出 ... 最后一行输出 写上即可。注意不能多或者少任何字符。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题