富国沪深
这些答案中有很多噪音; 几乎所有都是正确但过时而不整洁。mock_open是mock框架的一部分,使用起来非常简单。patch用作上下文返回用于替换已修补的对象的对象:您可以使用它来使您的测试更简单。Python 3.x用builtins而不是__builtin__。from unittest.mock import patch, mock_openwith patch("builtins.open", mock_open(read_data="data")) as mock_file: assert open("path/to/open").read() == "data" mock_file.assert_called_with("path/to/open")Python 2.7mock不是一部分,unittest你应该补丁__builtin__from mock import patch, mock_openwith patch("__builtin__.open", mock_open(read_data="data")) as mock_file: assert open("path/to/open").read() == "data" mock_file.assert_called_with("path/to/open")装饰案例如果你patch使用mock_open()'s结果作为装饰器,因为new patch's参数可能有点奇怪。在这种情况下最好使用new_callable patch's参数,并记住每个patch不使用的额外参数将传递给new_callable函数,如patch文档中所述。patch()接受任意关键字参数。这些将在构造时传递给Mock(或new_callable)。例如,Python 3.x的装饰版本是:@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")请记住,在这种情况下,patch将添加模拟对象作为测试函数的参数。