Издевательский импортированный класс, установленный для атрибута в конструкторе с пользовательской инициализацией тестирPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Издевательский импортированный класс, установленный для атрибута в конструкторе с пользовательской инициализацией тестир

Сообщение Anonymous »

Меня беспокоит какой-то макет, пока я тестирую класс Python в модуле, я предоставил пример, показанный на снимке экрана ниже:
my_example
Пока у меня есть такой модуль структура:

Код: Выделить всё

    mock_example/
source/
module_A/
__init__.py
A.py
test/
__init__.py
test_a.py
Предположим, что модуль_A содержит A.py с классом A с таким определением:

Код: Выделить всё

from robot.libraries.BuiltIn import BuiltIn # some external module

class A:
def __init__(self):
self._some_attribute = BuiltIn()

def some_method(self, variable_name):
return self._some_attribute.get_variable_value(variable_name)
но init.py модуля_A сужает пространство имен, устанавливая внутри:

Код: Выделить всё

from source.module_A.A import A
Я просто пытаюсь протестировать класс A в тестовом/ местоположении.
В конструкторе класса вы можете увидеть что некоторые из моих атрибутов присвоены импортированному классу внешнего модуля, и импортируется экземпляр. Меня интересует, как имитировать внешний модуль, назначенный в конструкторе класса A, но с таким файлом __init__.py, чтобы экземпляр класса из внешнего модуля не создавался и был имитирован. Возможно ли это вообще, если мой __init__.py модуля_A позволяет мне импортировать только класс A?
Вопрос
Как я могу высмеять _some_attribute A, например, в test_a.py:

Код: Выделить всё

from mock import Mock

def test_a_class_instance():
instance = A()

Код: Выделить всё

instance
не создаст экземпляр встроенного, но это будет имитируемый атрибут?
Что я пробовал?
Я пытался глобально высмеять внешний встроенный модуль, пытаясь возиться с sys.modules:

Код: Выделить всё

import sys
import types

from mock import Mock

module_name = 'robot.libraries.BuiltIn'
module_mock = types.ModuleType(module_name)
sys.modules[module_name] = module_mock

builtin_mock = Mock()
builtin_ctor_mock = Mock(name=module_name + '.BuiltIn', return_value=builtin_mock)
module_mock.BuiltIn = builtin_ctor_mock
а затем импортировать его в test_a.py с импортом вместо импорта класса, который будет протестирован, но безуспешно.
единственный способ издеваться над этим — позволить создать экземпляр встроенного, а затем переопределить его с помощью макета или полностью удалить содержимое __init__.py каталога модуля_A, но я бы не хотел вмешиваться в исходный код только потому, что меня укусил насмешка :)
Любые советы будут более чем приветствуются!

Подробнее здесь: https://stackoverflow.com/questions/793 ... t-of-teste
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»