有没有办法断言单元测试模拟对象上已设置属性?

Bas*_*har 6 testing unit-testing python-3.x python-unittest python-unittest.mock

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

search.query = Q('bool', must=must)
Run Code Online (Sandbox Code Playgroud)

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

Dir*_*ann 4

也许我误解了你的观点,但为什么不简单地运行被测试的代码,然后检查是否search具有预期的属性querysearch.query保持预期的值呢?例如(我分配了search一个MagicMock 对象,因为根据您的描述,它可能必须是。为了下面的示例,不需要是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)
Run Code Online (Sandbox Code Playgroud)