首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

pytest的内置插件盘点21. doctest

本文系《pytest源码剖析》系列内容

插件路径:_pytest.doctes

实现的 hook

调用的 hook

定义的 fixture

doctest_namespace

插件功能

创建了一系列命令行参数和 ini 配置,用于控制 doctests 的收集和执行

调用 doctest 收集用例,并生成 DoctestItem 作为用例

创建 doctest.DebugRunner 的子类,作为 runner 执行用例

代码片段

@fixture(scope="session")def doctest_namespace() -> Dict[str, Any]: return dict()

插件创建了一个全局的,返回可变对象的 fixture,可以实现一个命名空间。各个用例可利用这个命名空间,共享数据。

简评

doctests 是 python 内置的测试框架之一(另一个是 unittest), 它将文档字符串中的使用示例,作为测试用例进行执行

这是一个简单的示例

def add(a,b): """ 加法函数

>>> add(1,2) 3>>> add(2,2) 4

:param a: 整数 :param b: 整数 :return: 整数,a与b的相加结果 """

return a + b

其中的>>>会被视为用例执行步骤,下一行会被视为预期结果

通过下面的命令执行用例

python -m docstest test_add.py -v

执行结果:

...

doctest_namespace 是一个 session 级的 fixture,返回session级的字典,从而实现了一个命名空间,各个用例可利用这个命名空间进行共享数据

这一个很好的技巧,值得大家记住

...

doctest 更适合单元测试,在开发Python程序时,随手把文档字符串写好,

文档字符串既充当了文档,又实现了用例。

不过说实话,我写了近 10 年 python,完全没有用过它

和同为标准库的 unittest 相比,功能性和便捷性上差距还是很大的

...

doctest 和 unittest、nose 一样,是 pytest 对其他测试框架的兼容,

降低用户从其他测试框架迁移 pytest 的门槛

在我看来,doctest 插件最重要的不它的代码内容,体现了 pytest 良好的产品思维:

做好阶梯和通道,被人使用被人更方便地使用,才能让一个产品成长壮大

  • 发表于:
  • 原文链接https://page.om.qq.com/page/O1qjLo833umd1pvvnxtEMo4A0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券