Python Mock: настроить спецификацию фиктивного объекта - PullRequest
2 голосов
/ 10 июля 2019

У меня есть метод экземпляра, который инициирует объект другого класса.Например,

import module_two
class One:
    def start(self):
        self.two = module_two.Two()

Я исправляю один класс в моих тестовых примерах

@patch('module_one.One', autospec=True)
def test_one(patched_one):
    two = patched_one.return_value

    # Following method should raise error, but doesn't
    two.any_random_non_existing_method()

Как уже упоминалось, two.any_random_non_existing_method() не вызывает никаких ошибок, поскольку two Имитируемый объект не имеетлюбая назначенная спецификация.

Как я могу назначить спецификацию для объекта two.?Я ищу что-то вроде следующего фрагмента.

    # note: configure_spec actually doesn't exist.!
    two.configure_spec(module_two.Two)
    two.any_random_non_existing_method() # Error.! 

1 Ответ

1 голос
/ 10 июля 2019

После некоторых комментариев, похоже, mock_add_spec будет работать для вас:

Добавить спецификацию в макет. spec может быть либо объектом, либо списком строк. Только атрибуты в спецификации могут быть выбраны как атрибуты из макета.

https://docs.python.org/3/library/unittest.mock.html#unittest.mock.Mock.mock_add_spec

Вот как это должно выглядеть:

# Add specifications on existing mock object
two.mock_add_spec(module_two.Two)
two.any_random_non_existing_method() # Error.! 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...