doctest 如何测试错误捕获情况

发布于 2022-09-06 10:10:56 字数 993 浏览 20 评论 0

文档测试:就是在代码里用注释的方式 加入测试代码。
比如: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()

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

梦途 2022-09-13 10:10:56

自问自答:

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

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文