[英]How to replace an object inside a class being tested using unittest.mock in python
[英]How to mock function only in tested class and not in unittest case
因此,我有單元測試用例類和要測試的類。 此類中的一個函數具有我正在用來運行我正在測試的此方法的函數。 為了可視化問題,我將在下面編寫一些抽象代碼:
import needed_module
from casual_class import CasualClass
class CasualClassTests(unittest.TestCase):
def setUp(self):
self.casual_class = CasualClass()
def _run(self, func):
result = needed_module.runner(func)
return result
@mock.patch('needed_module.runner', return_value='test_run_output')
def test_get_that_item(self, mocked_runner):
result = self._run(self.casual_class.get_that_item())
和經過測試的課程:
import needed_module
class CasualClass:
def get_that_item(self):
#..some code..
run_output = needed_module.runner(something)
return something2
在此代碼中,由於賽跑者被嘲笑,因此get_that_item代碼甚至不會運行。 我要實現的是在測試用例中運行needed_module.runner原始模型,並在測試的類中模擬一個。 為了解決這個問題,我在互聯網上搜索了太久了...
為了完成這樣的任務,我必須在修補函數之前創建一個required_module對象,然后在測試用例中將其傳遞給_run函數以使用它。
class CasualClassTests(unittest.TestCase):
def setUp(self):
self.casual_class = CasualClass()
def _run(self, func, runner=None):
if not runner:
result = needed_module.runner(func)
else:
result = runner(func)
return result
def test_get_that_item(self, mocked_runner):
runner = needed_module.runner
with mock.patch('needed_module.runner', return_value='test_run_output'):
result = self._run(self.casual_class.get_that_item(), runner)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.