Макет / create_autospec: проверка типов аргументов

#python #unit-testing #mocking #pytest

#python #модульное тестирование #издевательство #pytest

Вопрос:

В модульном тестировании с mocked function я хотел бы проверить не только количество аргументов, но и то, что они соответствуют объявленным типам функции с автоматической спецификацией.

Вот пример кода:

 from unittest.mock import create_autospec


def foo(a: int, b: str):
    return str(a)   b

mock_foo = create_autospec(foo)

foo = mock_foo  # would be patched by e.g. @patch or monkeypatch fixture
foo(1, 2)
assert foo.called 
 

Этот код проверяет правильность foo вызова. например, такой вызов завершится неудачей: foo(1,2,3) это включает проверку аргументов, но не их типов. Есть ли способ для autospec или другой функции для проверки типов передаваемых аргументов? Эта информация доступна в сигнатуре метода, поэтому я полагаю, что мог бы сам написать такую проверку с помощью inspect module . Но есть ли что-то стандартное, встроенное или библиотечное?

Комментарии:

1. Не уверен, что я понимаю, что вы имеете в виду — вы уже знаете, что аргументы верны, теперь вы хотите проверить, имеет ли 1 (в вашем примере) int тип? Или вы хотите проверить только тип?

2. обратите внимание, что я вызвал foo с неправильными типами аргументов, но этот «тест» прошел.

3. На самом деле я не заметил 🙂 Я хотел сказать, что если вы проверяете правильность использования аргументов assert_called_with , подразумевается правильный тип — я просто не уверен, каков ваш вариант использования. Поскольку Python не применяет тип вне таких инструментов, как mypy , я не думаю, что существует стандартный способ сделать это.