为pythoncli程序编写测试的有用助手。
cli-test-helpers的Python项目详细描述
cli测试助手
为pythoncli程序编写测试的有用助手。在
当您从单元测试的角度考虑时,为命令行接口(CLI)工具may not seem strictly straight-forward编写测试。尤其是当你 使用argparse模块或click包控制应用程序 切入点有点偏离你。在
但也没那么糟。这个包裹是来帮忙的。这些例子给了你 一些关于如何开始的指导,帮助者允许您处理 常见情况,例如模拟CLI参数和环境变量值。在
使用
假设您使用pytest来运行测试,这肯定是一个 好主意。您的CLI程序名为foobar。你已经准备好了 setup.py,具有CLI入口点。对于你准备的测试 tests/文件夹(在foobar/之外),因为您不想测试 与应用程序代码一起打包)。然后你的目录布局 看起来有点像our example。在
功能测试
从一组简单的功能测试开始:
- 是否安装了入口点脚本?(在设置.py)在
- 这个包可以作为Python模块运行吗?(即无需安装)
- 命令XYZ可用吗?等等,请在此介绍您的整个CLI使用情况!在
这几乎是一个愚蠢的练习:将命令作为shell命令运行 并检查退出进程的状态代码(参见example)。 诀窍是运行一个非破坏性命令,例如使用 ^每个命令的{tt6}$选项。这应该涵盖整个CLI用户 接口定义。在
单元测试
那你就可以利用我们的帮手了。在
ArgvContext允许您模拟特定CLI参数的使用:
^{pr2}$EnvironContext允许您模拟环境值的存在:
deftest_fail_without_secret():"""Must fail without a ``SECRET`` environment variable specified"""message_regex="Environment value SECRET not set."withEnvironContext(SECRET=None):withpytest.raises(SystemExit,match=message_regex):foobar.command.baz()pytest.fail("CLI doesn't abort with missing SECRET")
见example。在
TDD
记住要坚持测试驱动的咒语:
- 写一行测试代码。让测试失败。在
- 写一行应用程序代码。通过测试。在
- 转到1。在
- 项目
标签: