与模块python django mock同名的补丁函数

时间:2016-11-09 14:41:03

标签: python django mocking patch

|-- my_module
|   |-- __init__.py
|   |-- function.py
`-- test.py

在function.py中:

import other_function

def function():
    doStuff()
    other_function()
    return
__init __。py

中的

from .function import function

在我的test.py

from django.test import TestCase
from mock import patch
from my_module import function

class Test(TestCase):

    @patch('my_module.function.other_function')
    def function_test(self, mock_other_function):
         function()

当我跑步时,我得到了一个 AttributeError:

  

< @task:项目的my_module.function.function:0x7fed6b4fc198>不具有   属性'other_function'

这意味着我正在尝试修补函数“function”而不是模块“function”。我不知道如何理解我想修补模块。

我还想避免重命名我的模块或功能。

有什么想法吗?

[编辑] 您可以在https://github.com/vthorey/example_mock找到示例 跑

python manage.py test

1 个答案:

答案 0 :(得分:1)

您可以在__init__.py中使用其他名称使模块可用:

from . import function as function_module
from .function import function

然后,您可以在test.py中执行以下操作:

from django.test import TestCase
from mock import patch
from my_module import function

class Test(TestCase):

    @patch('my_module.function_module.other_function')
    def function_test(self, mock_other_function):
         function()

我认为这不是一个特别优雅的解决方案 - 对于一个随意的读者来说代码并不是很清楚。