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

+0

真棒答案。谢谢! – Randy