這需要一個令人尷尬的數(shù)量來弄清楚,但我試圖在用于測試的模塊中使用時模擬 copyfile。該方法在模塊中按原樣使用:from shutil import copyfileclass ModuleName: @staticmethod def method_being_tested(): ... copyfile(source, destination)但是,所有對 mock 的調用都將被忽略。我嘗試用以下方法裝飾單元測試:@patch.object(shutil, 'copyfile')@patch('shutil.copyfile')@patch('ModuleName.copyfile')但 copyfile 仍在繼續(xù)運行。誰能給我任何線索?
1 回答

互換的青春
TA貢獻1797條經驗 獲得超6個贊
您需要在導入的地方修補它。假設ModuleNamelives 所在的文件名為my_class.py. 為了正確地模擬它,你需要做@patch(path.to.my_class.py)。下面是一個簡短的例子來說明這一點。
# demo/my_class.py
from shutil import copyfile
class ModuleName:
@staticmethod
def method_being_tested(source, destination):
copyfile(source, destination)
# test_my_class.py
from unittest.mock import patch
from demo.my_class import ModuleName
@patch("demo.my_class.copyfile")
def test_my_module(mock_copy):
ModuleName.method_being_tested(1, 2)
mock_copy.assert_called_once()
運行上面的成功并表明我們成功模擬了copyfile. 閱讀此處文檔中所示的修補位置可能會對您有所幫助。
添加回答
舉報
0/150
提交
取消