五 Home Assistant 测试单元

测试你的代码
如风格指南部分所述,所有代码都会被检查以验证所有单元测试通过且代码通过代码检查工具。本地测试使用 Tox 进行,它在运行script/setup时已被安装。要开始测试,只需运行它:

$ tox

重要提示:在创建拉取请求之前运行tox,以避免麻烦的修复。
运行 Tox 会针对本地可用的 Python 版本运行单元测试,并使用pycodestyle、pydocstyle和pylint验证代码和文档风格。你可以仅在一个 tox 目标上运行测试 —— 只需使用-e选择一个环境。例如,tox -e lint仅运行代码检查器,tox -e py34仅在 Python 3.4 上运行单元测试。
Tox 在底层使用虚拟环境来创建隔离的测试环境。当需求发生变化时,tox 虚拟环境会过时,导致测试错误。运行tox -r可告诉 Tox 重新创建虚拟环境。
如果你正在为一个组件或平台编写测试,并且需要在 Tox 环境中使用依赖项,更新script/gen_requirements_all.py中的列表。然后运行该脚本,再运行tox -r来重新创建虚拟环境。
使用 Tox 运行单个测试
你可以通过 Tox 向 py.test 传递参数,以便能够运行单个测试套件或测试文件。将py36替换为你使用的 Python 版本。

# 第一个测试失败后停止
$ tox -e py36 -- tests/test_core.py -x
# 运行指定名称的测试
$ tox -e py36 -- tests/test_core.py -k test_split_entity_id
# 测试运行2秒后使其失败
$ tox -e py36 -- tests/test_core.py --timeout 2
# 显示最慢的10个测试
$ tox -e py36 -- tests/test_core.py --duration=10

在 Tox 之外进行测试
运行 tox 将调用完整的测试套件。即使你指定要运行哪个 tox 目标,你仍然会运行该目标内的所有测试。这对于快速迭代代码不是很方便!为了能够在不使用 Tox 的情况下运行特定的测试套件,你需要将测试依赖项安装到你的 Python 环境中:

$ bash pip3 install -r requirements_test_all.txt

现在你已经安装了所有测试依赖项,你可以在单个文件上运行测试:

$ flake8 homeassistant/core.py
$ pylint homeassistant/core.py
$ pydocstyle homeassistant/core.py
$ py.test tests/test_core.py

你还可以使用lint脚本针对git diff upstream/dev --name-only报告的所有更改的文件运行代码检查测试:

$ script/lint --changed

防止代码检查错误
通过启用 Flake8 的 git 提交钩子,避免为修复风格错误而进行额外提交的麻烦。当你尝试向仓库提交时,Flake8 将检查你的代码,如果有任何风格错误,将阻止提交,这给你一个修复它们的机会!

$ pip3 install flake8 flake8-docstrings
$ flake8 --install-hook=git

flake8-docstrings扩展在运行 Flake8 时将根据 PEP257 检查文档字符串。
关于 PyLint 和 PEP8 验证的注意事项
如果你无法避免 PyLint 警告,可以添加注释以使用# pylint: disable=YOUR-ERROR-NAME禁用该行的 PyLint 检查。一个不可避免的示例是如果 PyLint 错误地报告某个对象没有某个成员。
总结
主要介绍了 Home Assistant 开发中的代码测试相关内容。强调了所有代码需通过单元测试及代码检查工具的验证,详细说明了使用 Tox 进行本地测试的方法,包括运行完整测试套件、针对特定目标或单个测试的操作,以及在需求变更时如何处理虚拟环境过时问题。同时介绍了在 Tox 之外进行测试的步骤,即安装测试依赖项后可对单个文件运行不同类型的测试。此外,还提到通过启用 Flake8 的 git 提交钩子可防止代码检查错误,以及在无法避免 PyLint 警告时的处理方式。整体为开发者提供了全面的代码测试指导,有助于确保代码质量,提高开发效率,遵循项目的代码规范要求。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值