我在模擬functiog時遇到了一些麻煩。所述功能導入並run_parsers.py
使用,我得到Mock在修補導入的模塊時返回ImportError
ImportError: 'No module named run_parsers'
當我試圖mock.patch
run_parsers.py
。
下面是test_run_parsers.py
from .. import run_parsers # Used in all my other tests.
def test_node_data_parser_throws_exception(self):
def parser():
return NotImplementedError()
with mock.patch("run_parsers.get_node_paths") as node_paths:
node_paths.return_value = "node_1"
run_parsers.get_node_data(parser, "https://stackoverflow.com/a/path")
我的測試代碼,這裏是我的倉庫結構
control_scripts
├── __init__.py
├── README.md
├── run_all_parsers.py
├── run_parsers.py
└── tests
├── __init__.py
├── test_run_parsers.py
According to this tutorial I'm supposed to mock where the function is imported.這就是爲什麼我試圖嘲弄調用模塊,而不是定義get_node_paths
模塊
我看到你嘲諷「run_parsers.get_node_paths」但你不調用該函數,你叫「run_parsers.get_node_data」。這是一個錯字嗎?或者是「run_parsers.get_node_data」調用的「run_parsers.get_node_paths」? –
另一個問題:你嘗試使用絕對導入「import run_parsers」並確保目錄「control_scripts」在你的sys.path上(作爲測試用例)嗎?這只是爲了首先測試模擬函數按預期工作,然後您可以解決導入問題。這就是我通常試圖解決這些問題的方法。 –
@SteveMisuta這不是一個錯字。我試圖測試'get_node_data','get_node_data'調用的其中一個函數是'get_node_paths'。 我還沒有檢查,看看control_scripts是否在路徑中。我必須去看看,但我很確定它不是。 – AlexLordThorsen