我正在编写测试,我想模拟__init__.py
中的一个列表,这意味着不在一个类下。
对象引用是:
project/app/management/commands/__init__.py
和__init__.py
类似于:
my_list_of_dict = [
{
'name': 'option1',
'vesion': 0,
},
{
'name': 'option1',
'vesion': 0,
}
]
如果是在上课,我会做类似的事情-
@mock.patch.object(Class, 'my_list_of_dict')
但事实并非如此。
我尝试过类似的
@mock.patch('project.app.management.commands.my_list_of_dict')
def test(self, mock_list):
mock_list.return_value = [{.....}]
但这没用。
编辑:
添加有关测试的信息
这是测试:
@mock.patch('project.app.management.commands.my_list_of_dict')
def test_run_command_with_parameters(self, mock_list_of_dict):
mock_list_of_dict.return_value = [
{
'name': 'other_name',
'vesion': 1
}
]
with mock.patch('django.core.management.call_command', return_value=True,
side_effect=None) as call_command_mock:
c = Command()
c.handle()
这是命令的一部分:
from . import my_list_of_dict
class Command(BaseCommand):
def handle(self, *args, **options):
for dict in my_list_of_dict:
.....
现在,当测试到达handle()
部分时,它将获得原始值,而不是模拟值
答案 0 :(得分:0)
只需为您的commands
模块提供正确的路径即可。
编辑(抱歉,第一个示例有误):
假设测试位于project
的{{1}}文件夹中,可能位于tests
(和some_tests.py
文件夹中,并且每个子文件夹的内部都有project
) 。此外,您还可以使用__init__.py
文件夹中的python -m discover
调用测试。
project
这现在可以在这里进行。 修补程序需要带有类或模块名称的正确路径,后跟要修补的属性。