[英]unit testing Python objects with pytest
我有一个方法可以返回满足特定条件的对象列表
result = find_objects(some_criteria)
print("%r" % result)
>> [<my_object.my_object object at 0x85abbcc>]
我想写一个pytest来验证find_objects()的操作
def test_finder(testbed):
result = testbed.find_objects(some_criteria)
assert result is [<my_object.my_object object at 0x85abbcc>]
到目前为止,pytest 指向左尖括号 (<) 并声明“SyntaxError”
我在想,即使我让它工作,将来当'my_object'存储在另一个位置时它也会失败。 如果我有多个实例,我如何确认报告的实例数量正确?
在这种情况下,验证返回对象的方法的 output 的 pythonic 方法是什么?
js
如您所料,问题在于尝试进行“是”比较。 'is' 表示“是完全相同的对象”,即使两个看起来相同的对象也可能无法通过此测试。
以下是您可能想要测试的一些内容
返回的 object 是正确的类型
assert isinstance(object, ResultClass)
返回的 object 有一些特定的属性
assert result.attribute == attribute
那种事。 我不认为有一种“公认”的检查方式,只是您可能想要检查的几件事,由您决定要检查的内容。 使用“is”是个坏主意,与 memory 中的位置相比是个坏主意。
你可以试试:
assert isinstance(result, my_object.my_object)
您还可以尝试比较字符串表示形式(这基本上就是您正在做的事情,除了缺少引号。) isinstance docs可能还想查看repr 文档,以了解您的 print 语句中发生了什么。 尖括号表示它不是 object 的插件替代品。
线
assert result is [<my_object.my_object object at 0x85abbcc>]
实际上是 Python 中的语法错误:)
如果要检查类型和长度,可以执行以下操作:
assert len(result) == 1
for x in result:
assert isinstance(result, my_object.my_object)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.