Python覆盖率 - 跳过或模拟输入法
问题描述:
上下文
我有一个python应用程序,我正在进行单元测试。一半的应用程序正在工作,我的测试精度非常高。Python覆盖率 - 跳过或模拟输入法
该应用程序需要一次性用户输入用于安装目的。
这意味着,如果您运行代码,必须与用户进行交互。
问题
Coverage是一个Python插件覆盖报告。我使用这个命令覆盖:
coverage run application.py
覆盖率运行我的应用程序,通过我的测试,并提供覆盖率报告。
问题是命令运行这些测试,执行我的应用程序,我必须提供输入。这不是什么大不了的事情,但我不能在我的CI服务器上使用Jenkins(或者我可以吗?)做到这一点。
问题
我想运行,而无需用户输入的覆盖工具。在我的测试中,input
函数被嘲笑。运行所有我的测试没有覆盖工作正常。我如何防止覆盖需要用户输入?
答
你或许应该有2条不同的代码路径,一个用于运行测试,以及一个用于运行应用程序:
coverage run tests.py
与tests.py
进口application.py
,必要时嘲讽方法,那么在运行实际的应用程序。
或者你可以允许通过命令行参数的用户输入:
coverage run application.py --user=input --other="etc."
最后,如果真的是无法测试或合理的嘲笑(碰巧您的应用程序的部分,说你喊成第三方异常追踪库/服务,您无法在测试中加载),您可以指示coverage
忽略那些用于计算覆盖范围的行,方法是在指令的末尾添加# pragma: no cover
,您将不会完全测试:
my = "code"
goes = "here"
if debug: # pragma: no cover
call_untestable(code=True)
this_portion(ignored_for_coverage=True)
covered_code = "yes, again!"
更多,请参阅:
http://coverage.readthedocs.io/en/coverage-4.2/excluding.html
真棒答案。谢谢! – Randy