Python 如何模拟嵌套函数?

Python 如何模拟嵌套函数?,python,unit-testing,mocking,Python,Unit Testing,Mocking,我想模拟特定函数中的一些嵌套函数: #tools.py def cpu_计数(): def get_cpu_配额(): 返回int(load(“/sys/fs/cgroup/cpu/cpu.cfs\u quota\u us”)) def get_cpu_period(): 返回int(load(“/sys/fs/cgroup/cpu/cpu.cfs\u period\u us”)) def GETU CPU(): 尝试: cfs\u quota\u us=get\u cpu\u quota()

我想模拟特定函数中的一些嵌套函数:

#tools.py
def cpu_计数():
def get_cpu_配额():
返回int(load(“/sys/fs/cgroup/cpu/cpu.cfs\u quota\u us”))
def get_cpu_period():
返回int(load(“/sys/fs/cgroup/cpu/cpu.cfs\u period\u us”))
def GETU CPU():
尝试:
cfs\u quota\u us=get\u cpu\u quota()
cfs\u period\u us=get\u cpu\u period()
如果cfs\U配额>0且cfs\U期间>0:
return int(math.ceil(cfs\u quota\u us/cfs\u period\u us))
除:
通过
返回多处理。cpu_计数()
返回get_CPU()
#test_tools.py
类TestTools(unittest.TestCase):
@补丁(“tools.cpu\u计数”)
def测试容器中的cpu计数(自我、cpu计数模拟):
cpu\u计数\u模拟。返回\u值。获取\u cpu\u配额。返回\u值=5000
cpu\u计数\u模拟。返回\u值。获取\u cpu\u周期。返回\u值=1000
cpu=tools.cpu\u计数()
self.assertEqual(5,CPU)
但是,运行此测试时,我有以下错误:

FAIL: test_cpu_count_in_container (tests.util.tools_test.ToolsTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/uilian/Development/foo/venv/lib/python3.7/site-packages/mock/mock.py", line 1305, in patched
    return func(*args, **keywargs)
  File "/home/uilian/Development/foo/tests/util/tools_test.py", line 154, in test_cpu_count_in_container
    self.assertIsInstance(cpus, int)
AssertionError: <MagicMock name='cpu_count()' id='140490818322384'> is not an instance of <class 'int'>

FAIL:test\u容器中的cpu\u计数(tests.util.tools\u test.ToolsTest)
----------------------------------------------------------------------
回溯(最近一次呼叫最后一次):
文件“/home/uilian/Development/foo/venv/lib/python3.7/site packages/mock/mock.py”,第1305行,带补丁
返回函数(*参数,**键盘)
文件“/home/uilian/Development/foo/tests/util/tools\u test.py”,第154行,位于容器中的test\u cpu\u count\u中
self.assertIsInstance(CPU,int)
AssertionError:不是的实例
可以模拟嵌套函数吗


如果没有,这种情况下最好的方法是什么?

您不能模拟嵌套函数,因为它在调用外部函数之前不存在。您应该“取消嵌套”它们。“因为在调用外部函数之前它不存在”。我想这就是我一直在寻找的答案。谢谢不能模拟嵌套函数,因为在调用外部函数之前它不存在。您应该“取消嵌套”它们。“因为在调用外部函数之前它不存在”。我想这就是我一直在寻找的答案。谢谢