[英]pytest mock class from different module
我試圖模擬一個 class ,它在我試圖測試的 class 的構造函數中實例化。 如果我定義 class 我試圖在與我嘗試測試的模塊相同的模塊中進行模擬,一切正常,但是當它們位於單獨的模塊中時,我會出錯。
這是我的示例,取自此處(請注意,在我的實際示例中,測試 class 位於“測試”子模塊中,其他兩個文件位於“app.src.code ...”模塊中。
我錯過了什么?
助手.py:
import os
class Helper:
def __init__(self, path):
self.path = path
def get_path(self):
base_path = os.getcwd()
return os.path.join(base_path, self.path)
工人.py:
from helper import Helper
class Worker:
def __init__(self):
self.helper = Helper('db')
def work(self):
path = self.helper.get_path()
print(f'Working on {path}')
return path
test_worker.py:
import unittest
from unittest.mock import patch
from worker import Worker
class WorkerTest(unittest.TestCase):
def test_patching_class(self):
with patch('helper.Helper') as MockHelper:
MockHelper.return_value.get_path.return_value = 'testing'
worker = Worker()
MockHelper.assert_called_once_with('db')
self.assertEqual(worker.work(), 'testing')
您需要使用補丁裝飾器為helper.py
模塊的Helper
class 創建模擬。
例如
helper.py
:
import os
class Helper:
def __init__(self, path):
self.path = path
def get_path(self):
base_path = os.getcwd()
return os.path.join(base_path, self.path)
worker.py
:
from helper import Helper
class Worker:
def __init__(self):
self.helper = Helper('db')
def work(self):
path = self.helper.get_path()
print(f'Working on {path}')
return path
test_worker.py
:
import unittest
from unittest.mock import patch
from worker import Worker
class TestWorker(unittest.TestCase):
def test_work(self):
with patch('worker.Helper') as mock_Helper:
mock_helper_instance = mock_Helper.return_value
mock_helper_instance.get_path.return_value = 'testing'
worker = Worker()
mock_Helper.assert_called_once_with('db')
self.assertEqual(worker.work(), 'testing')
if __name__ == '__main__':
unittest.main()
帶有覆蓋率報告的單元測試結果:
Working on testing
.
----------------------------------------------------------------------
Ran 1 test in 0.001s
OK
Name Stmts Miss Cover Missing
-------------------------------------------------------------------------
src/stackoverflow/61008064/helper.py 7 3 57% 6, 9-10
src/stackoverflow/61008064/test_worker.py 13 0 100%
src/stackoverflow/61008064/worker.py 8 0 100%
-------------------------------------------------------------------------
TOTAL 28 3 89%
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.