使用pytest对Python对象进行单元测试
我有一个方法,它返回满足特定条件的对象列表使用pytest对Python对象进行单元测试,python,testing,object,comparison,pytest,Python,Testing,Object,Comparison,Pytest,我有一个方法,它返回满足特定条件的对象列表 result = find_objects(some_criteria) print("%r" % result) >> [<my_object.my_object object at 0x85abbcc>] result=find_对象(某些_标准) 打印(“%r”%result) >> [] 我想编写一个pytest来验证find_objects()的操作 def测试查找器(测试台): 结果=测试床。查找\u对象(一些
result = find_objects(some_criteria)
print("%r" % result)
>> [<my_object.my_object object at 0x85abbcc>]
result=find_对象(某些_标准)
打印(“%r”%result)
>> []
我想编写一个pytest来验证find_objects()的操作
def测试查找器(测试台):
结果=测试床。查找\u对象(一些\u标准)
断言结果为[]
到目前为止,pytest指向左尖括号(您可以尝试:
assert isinstance(result, my_object.my_object)
您还可以尝试比较字符串表示(这基本上就是您正在做的,只是缺少引号)
可能还想看看打印语句中发生了什么。尖括号表示它不是对象的插件替代品。正如您所猜测的,问题是试图进行“是”比较。“是”表示“是”是完全相同的对象,即使两个看起来相同的对象也可能无法通过此测试 以下是一些您可能需要测试的内容
- 没有提出任何例外
- 返回的对象是正确的类型
assert-isinstance(对象、结果类)
- 返回的对象具有一些特定属性
assert result.attribute==attribute
assert result is [<my_object.my_object object at 0x85abbcc>]
这也是我提出的方法。我希望我能同时选择这个答案和杰特尼霍夫的答案。我认为这个方法比我和亨利提出的方法更可读,更容易理解。
assert result is [<my_object.my_object object at 0x85abbcc>]
assert len(result) == 1
for x in result:
assert isinstance(result, my_object.my_object)