2

我一直在玩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 文件,而不是它正在运行的文件。

4

1 回答 1

1

你还没有说你看到了什么行为,但我希望 CodeUnderTest 中的两行会显示为已覆盖,但文件中的其他行都没有。Coverage.py 无法测量在它启动之前发生的执行,这里它直到模块执行后才会启动。例如,该import coverage行在覆盖开始时已经执行。此外,一旦开始覆盖,直到下一个函数调用才真正开始测量。

运行coverage.py 的最简单方法是从命令行使用它。这样,您就知道它会尽早开始:

$ coverage run my_prog.py arg1 arg2 ...

如果您必须以编程方式使用它,请安排您的文件,以便您感兴趣的所有执行都发生在覆盖开始后调用的函数内。

于 2012-02-06T14:05:57.780 回答