Тип Python Mock только внутри модуля

Я использую макет для тестирования в Python. Я пытаюсь выполнить модульное тестирование метакласса, который перезаписывает метод __new__, а затем вызывает type.__new__(cls) внутри.

Я не хочу на самом деле вызывать type.__new__, поэтому я хочу издеваться над type. Конечно, я не могу исправить __builtin__.type, потому что это нарушает построение объекта в тесте.

Итак, я действительно хочу ограничить насмешки над type в тестируемом модуле. Это возможно?


person Travis Parks    schedule 27.07.2012    source источник


Ответы (1)


Да. Вы patch как можно ближе к тому месту, где вы собираетесь вызывать свою функцию, именно по этим причинам. Итак, в вашем тестовом случае, только вокруг функции (или любой вызываемой функции), которую вы будете вызывать, которая находится в стадии тестирования, вы можете исправить type.

В документации для patch есть множество примеров для этого. если вы хотите ознакомиться с ними.

Ваше здоровье.

person Julian    schedule 27.07.2012
comment
Проблема в том, что type.__new__ предотвращает создание макетов и любых других объектов, не входящих в модуль. Это включает сам mock.Mock. - person Travis Parks; 28.07.2012
comment
Верно. Вам нужно будет создать макет заранее и передать его patch. Более того, причина, по которой это сложно, заключается в том, что насмешка над type.__new__ действительно очень широка, как вы заметили. Возможно, вы захотите попробовать совсем другую стратегию. - person Julian; 28.07.2012