5

在下面的代码中,如果 search 是一个模拟对象,是否可以断言该query属性已设置?或者如果query是模拟对象,有没有办法做到这一点?

search.query = Q('bool', must=must)

到目前为止,我发现 Python unittest.mock 仅支持断言模拟已被称为函数。此外setattr魔术方法不能被模拟,因此search.__setattr__不能用于断言上述内容。

4

1 回答 1

3

也许我误解了你的意思,但为什么不简单地运行被测代码,然后检查是否search具有预期的属性querysearch.query保持预期值?例如(我分配search了一个MagicMock 对象,因为根据您的描述,它可能必须是。对于以下示例,不需要search是 aMagicMock或任何类型的模拟):

# 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)
于 2020-08-05T23:19:55.880 回答