我怎么嘲讽 os.remove
与 unittest.mock
?
我的尝试(使用 pytest
)
def test_patch_remove():
with patch("os.remove"):
remove('foo')
给出错误
remove('foo') E FileNotFoundError: [Errno 2] No such file or directory: 'foo'
表示 remove 没有被模拟。
你有两种可能:要么你模拟模块 os
并使用 remove
从模块(test_remove1
),或者你做 from os import remove
,并在自己的模块中进行模拟复制(test_remove2
):
test_remove.py
import os
from os import remove
from mock import patch
def test_remove1():
with patch('os.remove'):
os.remove('foo')
def test_remove2():
with patch('test_remove.remove'):
remove('foo')
在真正的测试中,导入会发生在另一个模块中,所以第二种情况必须适应该模块的补丁。