繁体   English   中英

正确的单元测试方法__repr__与dict

[英]Correct way of unit testing __repr__ with dict

说我有一个课程:

class MyClass:
    def __init__(self, **kwargs):
        self.kwargs = kwargs
    def __repr__(self):
        return "<%s: %r>" % (self.__class__.__name__, self.kwargs)

__repr__对于核心功能并不重要,但偶尔会调用日志记录,显示在堆栈跟踪中等等,所以我想对它进行单元测试。

问题类似于使用doctest时遇到的问题,但我宁愿在测试函数中保留任何复杂性(如排序),而不是在__repr__

现在我正在使用evalrerepr()调用中提取字典,但我想检查是否有人们使用的非eval替代品。

def test_repr():
    retval = repr(MyClass(a=1, b=2, c=3))
    match = re.match("^<MyClass: ({.*})>\Z", retval)
    assert match
    assert eval(match.group(1)) == dict(a=1, b=2, c=3)

你只需要检查kwargs字典被正确repr输出esented,所以只是通过零个或一个关键字参数:

>>> repr(MyClass(foo='bar')) == "<MyClass: {'foo': 'bar'}>"
True
>>> repr(MyClass()) == '<MyClass: {}>'
True

然后订购无关紧要。


如果您决定坚持评估提取的字典,请使用ast.literal_eval而不是vanilla eval 我也会使用切片而不是re ,因为您知道预期的格式:

>>> '<MyClass: {}>'[10:-1]
'{}'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM