使用nosetests和coverage模块,我希望代码的覆盖率报告能够反映正在测试的版本.考虑以下代码:
import sys
if sys.version_info < (3,3):
print('older version of python')
Run Code Online (Sandbox Code Playgroud)
当我在python版本3.5中测试时,print()显示为未经测试.我希望覆盖范围忽略该行,但仅当我使用python版本3.3+进行测试时
有没有办法# pragma: no cover在print()声明中做一些事情只是为了什么时候sys.version_info不小于(3,3)?实际上,我想做这样的事情:
import sys
if sys.version_info < (3,3):
print('older version of python') # pragma: [py26,py27,py32] no cover
Run Code Online (Sandbox Code Playgroud) 我想学习如何使用python的coverage.py模块来检查我的代码的覆盖模式.我尝试从各种来源阅读该工具,最后使用'pip'实用程序将其安装在我的Windows 7机器上.安装后,coverage模块安装在C:\ Python27\Lib\site-packages中.
现在,我正在阅读有关如何在此页面中使用它的说明:作者的安装说明.我按照本页面给出的安装说明进行操作.但是,在我安装之后,我不确定如何在命令行中使用该工具?根据作者在pip安装工具后,应该能够调用该命令
coverage --version
Run Code Online (Sandbox Code Playgroud)
并希望看到一些输出.但是,当我运行此命令时,我发现命令未找到错误.根据我的说法,这是预期的行为,因为coverage只是另一个python模块(即具有.py扩展名)而不是独立的可执行文件.所以,我不知道如何以独立的方式运行它.
有人请提供安装工具的确切细节.我只需要安装帮助.我将从nedbatchelder.com的"Coverage命令行用法"一文中了解CMD的用法.
学习.py
def multiply(a, b):
return a * b
def addition(a, b):
return a + b
Run Code Online (Sandbox Code Playgroud)
test_learning.py
import unittest
from learning import *
class Test(unittest.TestCase):
def test_multiply(self):
self.assertEqual( multiply(3,4), 12)
def test_addition(self):
self.assertEqual( addition(5,10), 15)
if __name__ == '__main__':
unittest.main()
Run Code Online (Sandbox Code Playgroud)
50% 的代码覆盖率
虽然两种方法都经过测试,但是代码覆盖率都是50%
C:\>coverage run learning.py test_learning.py
C:\>coverage report
Name Stmts Miss Cover
------------------------------
learning 4 2 50%
Run Code Online (Sandbox Code Playgroud) 我试图了解python脚本的运行覆盖率.我无法理解我尝试为具有无限循环的简单脚本运行coverage的情况:
#!/usr/bin/python
print "The only statement!!!"
while True:
pass
Run Code Online (Sandbox Code Playgroud)
在调用此脚本的覆盖范围后,我将终止此过程,因为它是一个无限循环,如果我尝试得到结果,我会得到:
Name Stmts Miss Cover Missing
-------------------------------------
我没有收到任何报道.我在做一些根本错误的事吗?