Как проверить результат имитируемой функции, не полагаясь на соглашение о вызовахPython

Программы на Python
Ответить
Anonymous
 Как проверить результат имитируемой функции, не полагаясь на соглашение о вызовах

Сообщение Anonymous »

В Python
можно проверить параметры имитируемой функции используя имена параметров в тесте, не полагаясь на способ вызова функции (либо с помощью args или с kwargs)?
Конкретный пример
Мне бы хотелось, чтобы этот пример возвращал пройденный тест:

Код: Выделить всё

# function under test.
# Please assume that `callback` has proper type annotations.
def domain_code_function(callback):
callback (1,2,c=3)

# function that would normally be passed to `domain_code_function`
# **Note**:
#           This function has three params `a`, `b` and `c`.
def add_values(a,b,c):
return a + b + c

class Tests(unittest.TestCase):
def test_works(self):
# setup
mymock = MagicMock()

# run
domain_code_function(mymock)

# check
# **Note**:
#       Verify each parameter by name.
mymock.assert_called_with(a=1,b=2,c=3)
Ограничения:
  • Я не хочу менять способ вызова функции в коде домена (args или kwargs) (Как указано в названии и описании)
Предыстория
Опираться на позиционные аргументы для тестов кажется хрупким и ненадежным. не очень хорошо читаемо.
Что я пробовал
Используя unittest.mock.call:

[*]

Код: Выделить всё

mymock.assert_has_calls([call(a=1,b=2,c=3)])
Кстати, даже проверка чисто с помощью позиционных аргументов не работает: mymock.assert_has_calls([call(1,2,3)])


Подробнее здесь: https://stackoverflow.com/questions/792 ... g-conventi
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»