我有一个方法可以返回满足特定条件的对象列表
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”存储在另一个位置时它也会失败。如果我有多个实例,我如何确认报告的实例数量正确?
在这种情况下,验证返回对象的方法的输出的 pythonic 方法是什么?
js
最佳答案
如您所料,问题在于尝试进行"is"比较。 “is”表示“是完全相同的对象”,即使两个看起来相同的对象也可能无法通过此测试。
这里有一些你可能想要测试的东西
- 没有异常
返回的对象是正确的类型
断言 isinstance(object, ResultClass)
返回的对象有一些特定的属性
断言 result.attribute == attribute
那种东西。我不认为有一种“可接受”的检查方式,只有几件你可能想检查的事情,由你决定你想检查什么。使用“is”是个坏主意,与内存中的位置进行比较也是个坏主意。
关于python - 使用 pytest 对 Python 对象进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5825236/