doctest使用注意点 -- 省略号的使用

今天进行doctest测试defaultdict时发现shell中没有问题,但是doctest就是抛出Exception

测试代码

# -*- coding: utf-8 -*-
from collections import defaultdict
def tree():
    """树结构
    
    >>> t = tree()
    >>> t["person"]["name"] = "fk"
    >>> t["person"]["age"] = 24
    >>> t["person"]
    defaultdict(<function tree at 0x01239D70>, {'age': 24, 'name': 'fk'})
    >>> t["person"]["name"]
    'fk'
    """
    return defaultdict(tree)


if __name__ == "__main__":
    import doctest
    doctest.testmod()

运行结果

Failed example:
    t["person"]
Expected:
    defaultdict(<function tree at 0x01239D70>, {'age': 24, 'name': 'fk'})
Got:
    defaultdict(<function tree at 0x00BFFEB0>, {'age': 24, 'name': 'fk'})
**********************************************************************

        发现defaultdict的工厂函数地址不一样,所以导致doctest出错

        解决办法是用省略号(...), 把函数地址处省略掉即可

新的测试代码

# -*- coding: utf-8 -*-
from collections import defaultdict
def tree():
    """数结构
    
    >>> t = tree()
    >>> t["person"]["name"] = "fk"
    >>> t["person"]["age"] = 24
    >>> t["person"]
    defaultdict(<function tree at ...>, {'age': 24, 'name': 'fk'})
    >>> t["person"]["name"]
    'fk'
    """
    return defaultdict(tree)


if __name__ == "__main__":
    import doctest
    doctest.testmod(optionflags=doctest.ELLIPSIS)
    # 注意,由于每次defaultdict的工厂函数地址不一样,所以doctest测试会报错,所以要使用省略号
    # 同时测试时要这样:doctest.testmod(optionflags=doctest.ELLIPSIS)


你可能感兴趣的:(doctest)