doctest使用上の注意点--省略記号の使用

1952 ワード

今日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)