【问题标题】:Is there a way to assert that an attribute has been set on a unittest mock object?有没有办法断言已在 unittest 模拟对象上设置了属性?
【发布时间】:2020-02-21 05:43:54
【问题描述】:
在下面的代码中,如果 search 是一个模拟对象,有没有办法断言 query 属性已设置?或者如果query 是模拟对象,有没有办法做到这一点?
search.query = Q('bool', must=must)
到目前为止,我发现 Python unittest.mock 仅支持断言模拟已被称为函数。另外 setattr 魔术方法不能被模拟,所以search.__setattr__ 不能用于断言上述内容。
【问题讨论】:
标签:
python-3.x
unit-testing
testing
python-unittest
python-unittest.mock
【解决方案1】:
也许我误解了你的意思,但为什么不简单地运行被测代码,然后检查search 是否具有预期属性query 并且search.query 是否具有预期值?例如(我将search 分配给MagicMock object,因为根据您的描述,它可能必须是。对于以下示例,search 不必是MagicMock 或任何类型的模拟):
# setup
search = MagicMock()
# when exercised, your code under test would do:
search.query = 42
# afterwards you validate that search.query holds the value you expect:
self.assertTrue(hasattr(search, 'query'))
self.assertEqual(search.query, 42)