Как подстановить строку, когда я утверждаю, что с ней вызывается метод? Python3 макет - PullRequest
1 голос
/ 03 февраля 2020

При использовании mock call() объектов с assert_has_calls я пытаюсь утверждать, что данная строка использовалась с неизвестным значением, добавленным в конец.

Например:

Тестируемый код:

mystring = 'a known string with an unknown value: {0}'.format(unknown_value)
method_to_call(mystring)

Текущий тестовый код:

with mock.patch('method_to_call') as mocked_method:
  calls = [call('a known string with and unknown value: {0}'.format(mock.ANY)]
  call_method()
  mocked_method.assert_has_calls(calls)

Это дает мне что-то вроде из:

AssertionError: Calls not found.
Expected: [call('a known string with and unknown value: <ANY>')]

Как я могу утверждать, что данная строка была передана методу, но учитывает неизвестное значение?

1 Ответ

3 голосов
/ 03 февраля 2020

Вы можете использовать библиотеку callee для частичного сопоставления строки, используемой в вызове метода:

from callee import String, Regex

with mock.patch('method_to_call') as mocked_method:
    call_method()
    mocked_method.assert_called_with(String() & Regex('a known string with an unknown value: .*'))

В качестве альтернативы, если вы не хотите добавьте еще одну библиотеку, и вы уверены, что знаете порядок вызовов, вы можете извлечь строку из аргументов вызова, а затем сопоставить с помощью regex

import re

with mock.patch('method_to_call') as mocked_method:
  call_method()
  argument_string = mocked_method.call_args[0][0]

  pattern = re.compile("a known string with an unknown value: .*")
  assert pattern.match(argument_string)

...