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