python - 使用 pytest 对 Python 对象进行单元测试

标签 python testing object comparison 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”存储在另一个位置时它也会失败。如果我有多个实例,我如何确认报告的实例数量正确?

在这种情况下,验证返回对象的方法的输出的 pythonic 方法是什么?

js

最佳答案

如您所料,问题在于尝试进行"is"比较。 “is”表示“是完全相同的对象”,即使两个看起来相同的对象也可能无法通过此测试。

这里有一些你可能想要测试的东西

  • 没有异常
  • 返回的对象是正确的类型

    断言 isinstance(object, ResultClass)

  • 返回的对象有一些特定的属性

    断言 result.attribute == attribute

那种东西。我不认为有一种“可接受”的检查方式,只有几件你可能想检查的事情,由你决定你想检查什么。使用“is”是个坏主意,与内存中的位置进行比较也是个坏主意。

关于python - 使用 pytest 对 Python 对象进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5825236/

相关文章:

python - 如何通过 X 点偏移 matplotlib 中的线

python - 亚马逊 (AWS) API 网关 - 身份验证

java - 如何从 selenium 框架中拆分 selenium 测试类?

Java dbUnit CRUD 测试错误

java - 如果比较对象数组索引和对象,如何正确使用 equals()?

python - 根据 vi 模式更改交互式 IPython 控制台中的光标形状

python - 我可以更改点图上的一个标记大小吗?

javascript - 在 JavaScript 中创建新对象时什么时候需要括号和 new 关键字?

go - 调用 TCP : Protocol not available go webassembly test

java - 扫描文件并将其分配给对象数组时获取 "Mismatch error"