我正在用 python 编写嵌入式软件代码的单元测试。
其中一个文件需要存在特定文件。 (例如“/dir_name/file_name.txt”)否则会引发错误。
通常,这个文件存在于硬件设备上,我的Python代码读取这个文件。在为Python代码编写单元测试时,如何模拟文件的存在?
tempfile.mkstemp()
似乎没有生成我想要的确切路径/文件名,即/dir_name/file_name.txt
。它总是添加一些随机字母。
这是Python3.4。可以用
unittest.mock
来实现吗?
您可以创建一个上下文管理器来创建和删除文件。
from contextlib import contextmanager
@contextmanager
def mock_file(filepath, content=''):
with open(filepath, 'w') as f:
f.write(content)
yield filepath
try:
os.remove(filepath)
except Exception:
pass
def test_function():
with mock_file(r'/dirname/filename.txt'):
function()
这是 unittest 的“入门”页面中给出的示例之一。
对于后代,这是该页面的复制/粘贴:
DEFAULT = "default"
data_dict = {"file1": "data1",
"file2": "data2"}
def open_side_effect(name):
return mock_open(read_data=data_dict.get(name, DEFAULT))()
with patch("builtins.open", side_effect=open_side_effect):
with open("file1") as file1:
assert file1.read() == "data1"
with open("file2") as file2:
assert file2.read() == "data2"
with open("file3") as file2:
assert file2.read() == "default"