跳至主要内容

Python代码的测试驱动源代码搜索。

项目描述

pytest-nodev是一个简单的Python代码测试驱动搜索引擎,它查找与给定测试指定的行为匹配的类和函数。

“测试驱动代码搜索”是如何工作的?

更确切地说,pytest-nodev是一个pytest插件,它允许您执行一组测试,这些测试指定了Python标准库和您已安装的所有模块中类或函数的预期行为。

让我看看它在实际中的工作情况。 我需要编写一个 parse_bool 函数,该函数能够从字符串中稳健地解析布尔值。 以下是我打算在编写自己的实现后用于验证的测试

def test_parse_bool():
    assert not parse_bool('false')
    assert not parse_bool('FALSE')
    assert not parse_bool('0')

    assert parse_bool('true')
    assert parse_bool('TRUE')
    assert parse_bool('1')

首先,从Python包索引中安装pytest-nodev的最新版本https://pypi.python.org/pypi/pytest-nodev

$ pip install pytest-nodev

然后将您的规范测试复制到 test_parse_bool.py 文件中,并用 pytest.mark.candidate 进行装饰,如下所示

import pytest

@pytest.mark.candidate('parse_bool')
def test_parse_bool():
    assert not parse_bool('false')
    assert not parse_bool('FALSE')
    assert not parse_bool('0')

    assert parse_bool('true')
    assert parse_bool('TRUE')
    assert parse_bool('1')

最后,指示 pytest 在 Python 标准库的所有候选调用函数上运行您的测试

$ py.test --candidates-from-stdlib test_parse_bool.py
======================= test session starts ==========================
platform darwin -- Python 3.5.1, pytest-2.9.2, py-1.4.31, pluggy-0.3.1
rootdir: /tmp, inifile: setup.cfg
plugins: nodev-1.0.0, timeout-1.0.0
collected 4000 items

test_parse_bool.py xxxxxxxxxxxx[...]xxxxxxxxXxxxxxxxx[...]xxxxxxxxxxxx

====================== pytest_nodev: 1 passed ========================

test_parse_bool.py::test_parse_bool[distutils.util:strtobool] PASSED

=== 3999 xfailed, 1 xpassed, 260 pytest-warnings in 75.38 seconds ====

pytest-nodev 仅在一分钟多一点的时间内收集了来自标准库的 4000 个函数,对它们全部运行了规范测试,并报告说在 distutils.util 模块中的 strtobool 函数是唯一通过您测试的候选者。

现在您可以对其进行审查,如果您喜欢它,您可以在代码中使用它。无需编写自己的实现!

哇!它每次都这么有效吗?

说实话,strtobool 是 Python 标准库中的一个鲜为人知的瑰宝,非常适合展示测试驱动代码搜索的所有好处。以下是其中一些按重要性大致排序的内容:

  • 导入一个函数就少写一个函数——并进行了测试、文档化、调试、移植、维护……

  • 它是经过实战考验的代码——很多旧虫子已经被消灭了

  • 它是别人的代码——有上游可以报告新虫子

  • 它为您提供了额外的有用功能——免费提供

  • 它在 Python 标准库中——不需要额外的依赖项

重大警告!

使用 pytest-nodev 搜索代码看起来非常像运行带有随机参数的任意调用。调用带有错误参数集的许多函数可能会产生意想不到的后果,从轻微烦恼(例如,os.mkdir('false')),到极其灾难性的(例如,shutil.rmtree('/', True))。特别是使用 --candidates-from-all 的 pytest-nodev 的严肃使用,需要以操作系统级别的隔离运行测试,例如作为专用用户或在专用容器内。有关如何安全有效地运行 pytest-nodev 的指南,请参阅 入门套件

项目资源

文档

http://pytest-nodev.readthedocs.io

支持

https://stackoverflow.com/search?q=pytest-nodev

开发

https://github.com/nodev-io/pytest-nodev

讨论

待定,请参阅问题 #15

下载

https://pypi.python.org/pypi/pytest-nodev

代码质量

Build Status on Travis CI Build Status on AppVeyor Coverage Status on Coveralls

贡献

非常欢迎贡献。请参阅 CONTRIBUTING 文档,了解最佳的协助方式。如果您遇到任何问题,请提交问题并附带详细描述。

作者

贡献者

赞助商

  • B-Open Solutions srl

许可协议

pytest-nodev 是免费和开源软件,根据 MIT 许可证分发。

项目详情


下载文件

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

源分布

pytest-nodev-1.0.1.tar.gz (25.9 kB 查看哈希)

上传于 来源

构建分发

pytest_nodev-1.0.1-py2.py3-none-any.whl (16.7 kB 查看哈希)

上传于 Python 2 Python 3

支持者