UnitTest Python издевается над одним вызовом одной функции

Я использую Mock ( http://www.voidspace.org.uk/python/mock/mock.html ) и наткнулся на конкретный макет, который я не могу найти в решении.

У меня есть функция с несколькими вызовами some_function, которая является Mocked.

def function(): some_function(1) some_function(2) some_function(3) 

Я только хочу высмеять первый и третий призывы к some_function. Второй звонок, который я хочу сделать с реальной функцией.

Я попробовал несколько альтернатив с http://www.voidspace.org.uk/python/mock/mock.html#mock.Mock.mock_calls , но без успеха.

Заранее спасибо за помощь.

One Solution collect form web for “UnitTest Python издевается над одним вызовом одной функции”

Кажется, аргумент wraps может быть тем, что вы хотите:

wraps : Item для обманчивого объекта. Если обертки не являются None, то вызов Mock передает вызов завершенному объекту (возвращая реальный результат и игнорируя return_value).

Однако, поскольку вы хотите, чтобы второй вызов не был издевательством, я предложил бы использовать mock.side_effect .

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

Если вы хотите вернуть другое значение для каждого вызова, это идеально подходит:

 somefunction_mock.side_effect = [10, None, 10] 

Только первый и третий вызовы somefunction то функции вернут 10.

Однако, если вам нужно вызвать реальную функцию, но не во второй раз, вы также можете передать side_effect вызываемому, но я нахожу его довольно уродливым (возможно, умнее это сделать):

  class CustomMock(object): calls = 0 def some_function(self, arg): calls = calls + 1 if calls != 2: return my_real_function(arg) else: return DEFAULT somefunction_mock.side_effect = CustomMock().some_function 
  • python sqlAlchemy: получил InvalidRequestError после местоположения класса изменений
  • ImportError, используя нос, нет ImportError, используя raw unittest?
  • Смысл функции python, основанный на входных аргументах
  • Тестирование загрузки файлов с помощью Flask и Python 3
  • Python unittest игнорирует numpy
  • Как отлаживать Django unittests с помощью PyDev?
  • Настройте зону покрытия.py для использования миграции
  • Вымывание Django Queryset для проверки функции, которая принимает запрос
  • Python - лучший язык программирования в мире.