spec_set не работает на create_autospec, но работает на Mock (spec_set = True) - PullRequest
0 голосов
/ 10 февраля 2019

Mock и create_autospec принимают spec_set, который устанавливает результирующий фиктивный экземпляр для отклонения установки атрибута, которого еще нет в объекте spec.Однако создание фиктивного экземпляра с Mock(spec_set=True) не позволяет установить атрибут ghost, а create_autospec(.., spec_set=True) - нет.

Я написал некоторый код для проверки этой проблемы.

from unittest.mock import Mock, create_autospec


def foo(a, b, c):
    pass


m = Mock(spec_set=foo)
try:
    m.bar = 'value'
except AttributeError:
    print("m has no attribute 'bar'")
else:
    assert False

m2 = create_autospec(spec=foo, spec_set=True)
try:
    m2.bar = 'value'
except AttributeError:
    print("m2 has no attribute 'bar'")
else:
    assert False

m2.bar пропускает spec_set=True, что приводит к assert False в последней строке.Я думаю, что m2.bar = ... должен был потерпеть неудачу из-за того, что spec_set был True.Я неправильно прочитал документацию?Я взял соответствующую часть из документации:

spec_set: более строгий вариант спецификации.Если используется, попытка установить или получить атрибут на макете, который не находится на объекте, переданном как spec_set, вызовет AttributeError.

Я использовал python 3.7.Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...