为什么模拟补丁适用于随机而不适用于 np?
Why mock patching works with random but not with np?
我有一个模块,其中许多不同的函数使用随机数或随机选择。
我正在尝试使用 mock 和 patch 来注入预选值来代替这些随机选择,但无法理解我收到的错误。
在我测试的功能中,我使用
np.random.randint
当我使用代码时
from unittest import mock
import random
mocked_random_int = lambda : 7
with mock.patch('np.random.randint', mocked_random_int):
我收到一条错误消息,没有名为 np 的模块。但是,numpy 被导入为 np,其他函数调用它也很好。
更令人困惑的是,如果我编辑上面的代码以删除前面的 'np',它会做我想要的:
with mock.patch('random.randint', mocked_random_int):
但我想了解为什么代码在没有 np.谢谢!
在任何给定的命名空间中,模块或包名称与分配给它的变量之间存在差异。一个简单的导入
import numpy
告诉 python 检查其导入的模块列表,必要时导入 numpy,并将模块分配给变量“numpy”
import numpy as np
几乎是一样的,除了你分配给一个变量“np”。它仍然是同一个 numpy 包,只是你给它取了不同的别名。
mock.patch
将导入和修补模块,无论您是否已经导入它,但您需要提供模块名称,而不是您当前模块的模块别名。
我有一个模块,其中许多不同的函数使用随机数或随机选择。 我正在尝试使用 mock 和 patch 来注入预选值来代替这些随机选择,但无法理解我收到的错误。
在我测试的功能中,我使用
np.random.randint
当我使用代码时
from unittest import mock
import random
mocked_random_int = lambda : 7
with mock.patch('np.random.randint', mocked_random_int):
我收到一条错误消息,没有名为 np 的模块。但是,numpy 被导入为 np,其他函数调用它也很好。
更令人困惑的是,如果我编辑上面的代码以删除前面的 'np',它会做我想要的:
with mock.patch('random.randint', mocked_random_int):
但我想了解为什么代码在没有 np.谢谢!
在任何给定的命名空间中,模块或包名称与分配给它的变量之间存在差异。一个简单的导入
import numpy
告诉 python 检查其导入的模块列表,必要时导入 numpy,并将模块分配给变量“numpy”
import numpy as np
几乎是一样的,除了你分配给一个变量“np”。它仍然是同一个 numpy 包,只是你给它取了不同的别名。
mock.patch
将导入和修补模块,无论您是否已经导入它,但您需要提供模块名称,而不是您当前模块的模块别名。