python - 断言 *any* 属性已设置

标签 python python-mock

我有一个 Python mock对象,我想断言是否设置了该对象的任何属性。

我不相信PropertyMock将适用于我的目的,因为我必须知道是否设置了任何属性,而不是特定属性。

它也不像我可以模拟模拟对象的 __setattr__ 方法。

如何测试模拟对象的任意属性是否已设置?

最佳答案

虽然这个解决方案并不理想,但您可以在初始化后存储模拟对象的属性,并将它们与测试时的属性进行比较。

>>> myobj = Mock()
>>> attrsbefore = set(dir(myobj))
>>> attrsbefore
set(['reset_mock', 'method_calls', 'assert_called_with', 'call_args_list', 'mock_calls', 'side_effect', 'assert_called_once_with', 'assert_has_calls', 'configure_mock', 'attach_mock', 'return_value', 'call_args', 'assert_any_call', 'mock_add_spec', 'called', 'call_count'])
>>> myobj.foo = 'bar'
>>> set(dir(myobj)) - attrsbefore
set(['foo'])

该方案需要维护额外的状态,并没有严格测试一个属性是否被设置,只测试两个时间点的属性差异。

关于python - 断言 *any* 属性已设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22792032/

相关文章:

python - 优化mysql多次更新

python - 实例化模拟对象时,模拟属性返回值被覆盖

Python测试: using a fake file with mock & io. StringIO

python - 如何模拟一个方法并查看它是否被调用?

python - 使用带有 zmq 和 python 的套接字通过 send_json 发送整数列表时出现奇怪的错误

python - 这是可并行的吗?

python - 自定义 Django 用户模型 - 用户名作为主键属性

python - 我可以向 Python "Mock"对象添加实例方法吗?

python - 模拟 Python 属性的函数

python - django外部应用程序安装 "Error: No module named nested-inlines"