获取Python的coverage.py来收集导入它的模块的覆盖范围?

时间:2012-02-06 05:18:16

标签: python testing code-coverage python-coverage

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

1 个答案:

答案 0 :(得分:1)

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

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

$ coverage run my_prog.py arg1 arg2 ...

如果您必须以编程方式使用它,请安排您的文件,以便您感兴趣的所有执行都发生在启动coverage之后调用的函数中。