首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >‘’()报告说包的setup.py没有被测试覆盖

‘’()报告说包的setup.py没有被测试覆盖
EN

Stack Overflow用户
提问于 2012-07-01 02:14:16
回答 2查看 1.3K关注 0票数 2

当我用积分测试python setup.py nosetests时,我得到了96%的覆盖率

代码语言:javascript
复制
----------------------------------------------------------------------
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测试相同的代码,就会得到的完整覆盖率

代码语言:javascript
复制
----------------------------------------------------------------------
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模块的测试覆盖率。

这一问题已在以下方面得到证实:

  1. 运行Ubuntu10.04Server 32位的连续集成服务器
  2. 一个新创建的Rackspace云服务器运行Ubuntu12.04服务器64位,其设置如下: $ sudo智能更新$ sudo能力更新$ sudo升级$ sudo智能安装python-pip mercurial git-core python-gmpy python-dev $ hg克隆积分 $ sudo pip安装-r beam_integrals /requments.txt$ sudo pip install -r beam_integrals/requirements test.txt$ cd beam_integrals$ python setup.py nosetest$nosetest$nosetest
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-01 12:51:03

python setup.py nosetests在开始覆盖测试之前导入了beam_integrals,因此在进行覆盖测量时已经导入了它。这是因为您的setup.py直接导入beam_integrals。这不是一件坏事,许多Python项目这样做是为了从代码本身获取版本信息,而不是在setup.py中复制它。

当您使用nosetests时,它知道在导入任何内容之前先开始覆盖度量。实际上,它可能会导入东西,卸载它们,启动覆盖率,然后运行代码,再次导入内容。

除了使用nosetests来运行测试之外,我不知道您能做些什么。

票数 4
EN

Stack Overflow用户

发布于 2014-10-15 11:58:44

要完成Ned的回答,我知道两个解决方案,可以避免在文件中复制版本。

  1. 导入模块后,从sys.modules中删除模块 导入mod的beam_integrals (M) in sys.modules.keys() if (‘beam_integrals’):del sys.modulesmod 覆盖率报告现在将包括所有文件。 但是,在您的示例中,仍然需要安装sympy。 这就是我转向下一个解决方案的原因。
  2. 读取模块版本而不导入: def get_version():以open(‘beam_integrals/__init__..py’)作为f: for行f: if line.startswith('__version__'):返回eval(line.split(‘=’‘)-1)设置(名称=’beam_integrals‘,version=get_version(), 我在这里看到了这个:https://github.com/PyCQA/pycodestyle/blob/2.3.1/setup.py
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11279096

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档