如何使用unittest.mock模拟上下文管理器中使用的对象
当测试使用with语句的代码时,可以是模拟底层对象具有挑战性。让我们考虑以下示例:
def testme(filepath): with open(filepath) as f: return f.read()
要使用 unittest.mock 测试此函数,我们需要模拟 open 函数。具体方法如下:
Python 3:
Python 2:
示例:
<code class="python">from unittest.mock import patch, mock_open @patch("builtins.open", new_callable=mock_open, read_data="data") def test_patch(mock_file): assert open("path/to/open").read() == "data" mock_file.assert_called_with("path/to/open")</code>
请记住,在 Python 3 中,patch 会将模拟对象作为参数传递给您的测试函数,而在 Python 2 中,您必须显式对模拟文件进行断言。
以上是如何使用unittest.mock模拟上下文管理器中使用的对象?的详细内容。更多信息请关注PHP中文网其他相关文章!