跳转到主要内容

测试时类型检查

项目描述

https://secure.travis-ci.org/dstanek/typist.png

typist 是一个测试时工具,它使用您的 Sphinx 文档字符串(您确实记录了代码吗?)以确保您的可调用对象

  • 仅使用它们期望的类型进行调用

  • 只返回它们声明的类型

  • 只抛出它们声明的异常

用法

目前您必须导入 typist 并安装它。安装的参数是您要测试的代码的最高级包。将来我计划为测试框架创建插件。

import typist
typist.install('keystone')

typist 实现了一个 导入钩子,它将使用 Python 的 AST 为您的所有可调用对象添加装饰器。装饰器确保可调用对象根据其文档字符串类型声明正确使用。如果您的可调用对象没有 :param:、:returns 或 :raises:,则它仍然可以正常工作,只是不进行检查。

类型语言

类型将从以下格式中提取

param {type} varname:

一些描述性文本

rtype avarname:

{types}

returns {types}:

一些描述性文本

{type} 可以是任何有效的 Python 类型。一些示例

  • int

  • list

  • :py:class:typist._import_hook.Finder

  • typist._import_hook.Finder

{types} 可以是类型列表,用逗号分隔,包含可选的 ‘or’。可以使用与上面相同的所有类型。一些示例

  • list 或 None

  • intfloatlong

  • intfloatlong

  • typist._py.PY2typist._py.PY3

  • listcallable

可调用 上面是一个特殊情况。虽然在技术上它不是一个类型,但它确实描述了一个对象应该如何行为。另一个尚未实现但可能很快就会实现的特殊情况是 可迭代

用于指定类型的这种语言将变得更加丰富,用于集合。允许开发者指定参数化类型将非常方便,例如

  • list<int> - 一个 list,元素为 int

  • dict<str,package.module.Class> - 一个 dict,键为字符串,值为 package.module.Class 的实例

背景

当我正在为 Keystone 开发 Python 3 支持 时,我产生了写这个的想法。我想确保代码实际上得到了它期望的二进制或文本类型。我对 .encode(‘utf8’).decode(‘utf8’) (也许我搞反了) 的垃圾做法感到厌烦,这种做法让异常消失了,但并没有解决任何问题。

我没有费心寻找已经实现的东西,因为我想要学习一些关于导入钩子的知识。如果你知道更好的东西,请告诉我。如果这是自切片面包以来最好的东西,我也想知道。

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分布

typist-0.0.1.tar.gz (6.5 kB 查看哈希值)

上传时间

构建分布

typist-0.0.1-py3-none-any.whl (11.7 kB 查看哈希值)

上传时间 Python 3

typist-0.0.1-py2-none-any.whl (11.7 kB 查看哈希值)

上传时间 Python 2

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面