pycharm mypy reveal_type的单元测试

sczxawaw  于 2022-11-23  发布在  PyCharm
关注(0)|答案(1)|浏览(133)

我在遗留代码中有一些要点(python库:music 21),它使用了大量的重载和泛型变量来显示/typecheck一个t.Sequence中的所有子元素都属于一个特定的类型。有很多@overload装饰器来显示不同的属性如何返回不同的值。在这一点上,这些函数可以正常工作,但是过去的一些PR破坏了其他开发者所需要的内省。
代码经过了广泛的测试,但是mypy和PyCharm等检查器的推断类型没有经过测试。是否有方法对推断类型进行测试?类似于:

SomeClassType = typing.TypeVar('SomeClassType', bound='SomeClass')

class SomeClass:
    pass

class DerivedClass(SomeClass):
    pass

class MyIter(typing.Sequence[typing.Type[SomeClassType]]):
    def __init__(self, classType: typing.Type[SomeClassType]):
        self.classType = classType

# ------- type_checks.py...
derived_iterator = MyIter(DerivedClass)

# this is the line that I don't know exists...
typing_utilities.assert_reveal_type_eq(derived_iterator, 
                                       MyIter[DerivedClass])
# or as a string 'MyIter[DerivedClass]'

mypy的reveal_type看起来在这里会很有帮助,但是我似乎找不到任何到测试系统的集成,等等。谢谢!

jogvjijk

jogvjijk1#

您要查找的函数实际存在。但它的名称不同:
首先,定义类型测试:

from typing_extensions import assert_type

def function_to_test() -> int:
    pass

# this is a positive test: we want the return type to be int
assert_type(function_to_test(), int)

# this is a negative test: we don't want the return type to be str
assert_type(function_to_test(), str)  # type: ignore

然后对文件运行mypy:mypy --strict --warn-unused-ignores.
失败的阳性测试仅报告为mypy错误,失败的阴性测试报告为"未使用"类型:忽略"注解"。
软件包typing_extensions与mypy一起安装。
来源:https://typing.readthedocs.io/en/latest/source/quality.html

相关问题