Python 覆盖率 - 跳过或模拟输入法
Python coverage - skip or mock input method
上下文
我有一个正在单元测试的 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."
最后,如果您的应用确实存在无法测试或无法合理模拟的部分(发生这种情况,假设您正在调出无法加载的第三方异常跟踪 library/service您的测试),您可以指示 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
上下文
我有一个正在单元测试的 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."
最后,如果您的应用确实存在无法测试或无法合理模拟的部分(发生这种情况,假设您正在调出无法加载的第三方异常跟踪 library/service您的测试),您可以指示 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