如何在测试类中模拟函数,而不是在单元测试的情况下

问题描述:

所以我有单元测试用例类和我想测试的类。这个类中有一个函数,它有一个函数用于运行我正在测试的这个方法。以可视化的问题,我会写下面的一些抽象代码:如何在测试类中模拟函数,而不是在单元测试的情况下

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 original,并在被测试的类中嘲笑一个。我已经在互联网上搜索太久了,要解决这个问题...

要实现这样的任务,我必须在修补函数之前创建一个needed_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)