【问题标题】:How to mock function only in tested class and not in unittest case如何仅在测试类中而不是在单元测试用例中模拟功能
【发布时间】:2017-07-31 12:35:56
【问题描述】:

所以我有单元测试用例类和一个我想测试的类。这个类中有一个函数,它有一个我用来运行我正在测试的方法的函数。为了可视化问题,我将在下面编写一些抽象代码:

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 代码甚至不会运行,因为 runner 被模拟了。我想要实现的是在测试用例中运行 required_module.runner original 并在测试类中模拟一个。我在网上搜索了太久,无法解决这个问题...

【问题讨论】:

    标签: python unit-testing testing mocking python-unittest


    【解决方案1】:

    为了完成这样的任务,我必须在修补函数之前创建一个 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)
    

    【讨论】:

      猜你喜欢
      • 2019-07-27
      • 1970-01-01
      • 1970-01-01
      • 2018-11-06
      • 1970-01-01
      • 2017-06-14
      • 2020-04-24
      • 1970-01-01
      • 2021-10-13
      相关资源
      最近更新 更多