当我用python setup.py nosetests
测试https://bitbucket.org/petar/beam_integrals时,我得到96%的覆盖率:
----------------------------------------------------------------------
XML: nosetests.xml
Name Stmts Miss Cover Missing
------------------------------------------------------------------------------
beam_integrals 7 7 0% 1-24
beam_integrals.beam_types 79 0 100%
beam_integrals.characteristic_equation_solvers 65 0 100%
beam_integrals.exceptions 6 0 100%
beam_integrals.utils 14 0 100%
------------------------------------------------------------------------------
TOTAL 171 7 96%
----------------------------------------------------------------------
Ran 634 tests in 178.245s
OK (SKIP=3)
但是,如果我使用
nosetests
测试相同的代码,我将获得完整的覆盖率:----------------------------------------------------------------------
XML: nosetests.xml
Name Stmts Miss Cover Missing
------------------------------------------------------------------------------
beam_integrals 7 0 100%
beam_integrals.beam_types 79 0 100%
beam_integrals.characteristic_equation_solvers 65 0 100%
beam_integrals.exceptions 6 0 100%
beam_integrals.utils 14 0 100%
------------------------------------------------------------------------------
TOTAL 171 0 100%
----------------------------------------------------------------------
Ran 634 tests in 179.226s
OK (SKIP=3)
似乎
python setup.py nosetests
没有正确报告beam_integrals
模块的测试覆盖率。已在以下时间验证此问题:
我们的continuous integration server运行Ubuntu 10.04服务器32位
新创建的运行Ubuntu 12.04服务器64位的Rackspace云服务器,具有以下设置:
$ sudo aptitude update
$ sudo aptitude upgrade
$ sudo reboot
$ sudo aptitude install python-pip mercurial git-core python-gmpy python-dev
$ hg clone https://bitbucket.org/petar/beam_integrals
$ sudo pip install -r beam_integrals/requirements.txt
$ sudo pip install -r beam_integrals/requirements-test.txt
$ cd beam_integrals
$ python setup.py nosetests
$ nosetests
最佳答案
python setup.py nosetests
是在开始覆盖测试之前导入波束积分,因此在覆盖测量发生时已经导入了波束积分。这是因为setup.py直接导入梁积分。这不是件坏事,很多Python项目这样做是为了从代码本身获取版本信息,而不是在setup.py中复制它。
当您使用nosetests
时,它知道在导入任何内容之前开始覆盖率测量。实际上,它可能会导入一些东西,使它们不受影响,开始覆盖,然后运行代码,这会再次导入一些东西。
除了使用nosetests
来运行测试之外,我不确定您能对此做些什么。
关于python - ``python setup.pyosentests''报告测试未覆盖软件包的__init__.py,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11279096/