簡體   English   中英

如何僅在經過測試的類而不是在單元測試的情況下模擬函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM