__init__.py下的python修补程序对象

时间:2019-01-31 12:29:03

标签: python testing mocking

我正在编写测试,我想模拟__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()部分时,它将获得原始值,而不是模拟值

1 个答案:

答案 0 :(得分:0)

只需为您的commands模块提供正确的路径即可。

编辑(抱歉,第一个示例有误):

假设测试位于project的{​​{1}}文件夹中,可能位于tests(和some_tests.py文件夹中,并且每个子文件夹的内部都有project) 。此外,您还可以使用__init__.py文件夹中的python -m discover调用测试。

project

这现在可以在这里进行。 修补程序需要带有类或模块名称的正确路径,后跟要修补的属性。