У меня есть простой метод на my_module.py
с подписью:
def my_method(value: float, extra: str = "something") -> str:
pass
Затем у меня есть параметризованный тест на test_my_module.py
для него:
from typing import List
from typing import Union
import pytest
import my_module
@pytest.mark.parametrize(
"params, expected",
[
([1.0], "result1"),
([2.0], "result2"),
([2.0, "extra"], "result3")
],
)
def test_my_method(params: List[Union[int, str]], expected: str) -> None:
assert my_module.my_method(*params) == expected
Когда я запускаю тесты динамического типа, такие как typeguard
, он проходит. Но с mypy
я получаю эти [arg-type]
ошибки:
tests/test_my_module.py: note: In function "test_my_method":
tests/test_my_module.py:50:30: error: Argument 1 to "my_method" has incompatible type "*List[Union[int, str]]"; expected "float"
[arg-type]
assert my_module.my_method(*params) == expected
^
tests/test_my_module.py:50:30: error: Argument 1 to "my_method" has incompatible type "*List[Union[int, str]]"; expected "str"
[arg-type]
assert my_module.my_method(*params) == expected
^
Не совсем уверен, как мне аннотировать эти типы, чтобы они прошли. Обратите внимание, что это минимальный пример, поэтому я хочу вставить распаковку списка аргументов params
в список, который я создаю для параметризации тестов.
Какие-нибудь мысли?
def test_my_method(params: Union[Tuple[float], Tuple[float, str]], expected: str) -> None:
- person Samwise   schedule 16.02.2021