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 的指南,请参阅 入门套件。
项目资源
文档 |
|
支持 |
|
开发 |
|
讨论 |
待定,请参阅问题 #15 |
下载 |
|
代码质量 |
贡献
非常欢迎贡献。请参阅 CONTRIBUTING 文档,了解最佳的协助方式。如果您遇到任何问题,请提交问题并附带详细描述。
作者
Alessandro Amici - @alexamici
贡献者
赞助商
许可协议
pytest-nodev 是免费和开源软件,根据 MIT 许可证分发。
项目详情
下载文件
下载适合您平台文件。如果您不确定要选择哪个,请了解有关 安装包 的更多信息。
源分布
构建分发
pytest-nodev-1.0.1.tar.gz 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 17d721a2c39a3b38f872979a727df3c5ca6391f9efd0273c23b2c9e46a4af8be |
|
MD5 | cdaa23849c72e4035fbd307b0e7c45b1 |
|
BLAKE2b-256 | fdbf88f62917fdd782992aed060e9cddd1c73372fefc0fd382a1eceddb256bc9 |
pytest_nodev-1.0.1-py2.py3-none-any.whl 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 43be610727055f11e77397de9bbca045561f01da713c166a4702121f048677a5 |
|
MD5 | 0349c30d4805373084e1caca839aebae |
|
BLAKE2b-256 | 62bc5af87bc5436c0b0a5798264105065a9603d7e47552ad8caef4e9ed13290e |