假设我有一个给定的类:
class MyClass:
def __init__(self, **kwargs):
self.kwargs = kwargs
def __repr__(self):
return "<%s: %r>" % (self.__class__.__name__, self.kwargs)
__repr__
对于核心功能并不是很重要,但有时会被用于日志记录、堆栈跟踪等,因此我想对其进行单元测试。
这个问题类似于使用doctest时遇到的问题, 但我更愿意将任何复杂性(如排序)放在测试函数中,而不是放在__repr__
中。
目前,我正在使用eval
和re
从repr()
调用中提取字典,但我想检查是否有人使用非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
是构建而不是简单传入的,因此我无法使用单键或空字典进行测试。不过,literal_eval
是一个好的提示。谢谢! - Felipe