当我用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/

10-16 13:04