我一直在玩弄 coverage.py,但似乎无法让它为 __main__ 模块收集覆盖率。
我在 Windows 上,喜欢使用 IDLE 破解脚本。 edit-hit-F5 循环非常方便、快速且有趣。不幸的是,coverage.py 似乎无法(或不愿意)收集主模块的覆盖率——在下面的代码中,它报告没有收集到任何数据。我的代码如下所示:
import coverage
cov = coverage.coverage()
cov.start()
def CodeUnderTest():
print 'do stuff'
return True
assert CodeUnderTest()
cov.stop()
cov.save()
cov.html_report()
有人有什么想法吗?我尝试了各种覆盖选项,但无济于事。 IDLE 创建的环境似乎对覆盖不是很友好,因为 sys.modules['__main__'] 指向一个 idle.pyw 文件,而不是它正在运行的文件。
请您参考如下方法:
你没有说你看到了什么行为,但我希望 CodeUnderTest 中的两行显示为已覆盖,但文件中的其他行都没有。 Coverage.py 无法衡量在它开始之前发生的执行情况,并且在这里直到模块执行之后它才开始。例如,import coverage 行在覆盖开始时已经执行。此外,一旦开始覆盖,直到下一个函数调用才真正开始测量。
运行 coverage.py 的最简单方法是从命令行使用它。这样,您就知道它会尽早开始:
$ coverage run my_prog.py arg1 arg2 ...
如果您必须以编程方式使用它,请安排您的文件,以便您感兴趣的所有执行都发生在覆盖开始后调用的函数内。
