2016-04-23 5 views
0

Как уладить мой пользовательский декоратор с помощью monkeypatch или pytest.mock? я сумел подражают ей делать (ответ на вопрос this):Mocking decorators in python с mock и pytest

package.decorator = mytestdecorator

Проблема заключается в том, что она разрушает некоторые другие тесты, где я на самом деле нужно, что декоратор работать.

ответ

2

Вы должны контролировать полный жизненный цикл своего издевающегося декоратора и возвращать декоратор обратно в исходное состояние.

Это может быть сделано несколькими различными способами:

  • контекста менеджер, который строит высмеивал декоратора, и возвращает его обратно __exit__.
  • функции настройки и размыкания для вашего теста, teardown должен вернуть декоратор.
  • pytest fixture with finalizer
  • pytest fixture with yield выражение.

Лично мне нравится @pytest.yield_fixture как он держит код коротким, и как только вы понимаете, что все, что происходит после того, как yield заявления в коде арматуры является кодом очистки, все очень ясно сделать.

+0

Можете ли вы также привести пример? –