#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
, я не думаю, что существует стандартный способ сделать это.