Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用pytest对Python对象进行单元测试_Python_Testing_Object_Comparison_Pytest - Fatal编程技术网

使用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)