2016-11-09 3 views
1
|-- 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() 

Когда я запустил это, я получил Attri buteError:

<@task: my_module.function.function of project:0x7fed6b4fc198> does not have the attribute 'other_function'

Это означает, что я пытаюсь исправить функцию «функция» вместо функции «функции» модуля. Я не знаю, как понять, что я хочу исправить модуль.

Я также хотел бы избежать переименования моего модуля или функции.

Любые идеи?

[Редактировать] Вы можете найти пример в https://github.com/vthorey/example_mock перспективе

python manage.py test 
+0

У вас есть решение для этого? –

+0

@HaykDavtyan Nope. Вы можете повысить свой вопрос, если хотите увеличить видимость;) –

ответ

0

Вы могли бы сделать модуль доступен под другим именем в __init__.py:

from . import function as function_module 
from .function import function 

Затем вы можете сделать следующее в test.py:

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

class Test(TestCase): 

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

Я не думаю, что это особенно элегантное решение - код не очень понятен случайному читателю.

Обратите внимание, что dir является встроенным устройством, поэтому вам следует избегать использования его даже в примере кода!

+0

спасибо за отзыв, я использовал строку. Я редактировал вопрос! –

+0

Можете ли вы привести пример, который фактически запускает и удаляет ошибку? Я использовал пакет 'request' как' other_function', и мой код работал нормально –

+0

https://github.com/vthorey/example_mock вы можете запустить тест python manage.py, чтобы получить ошибку –