1

当我使用coverage.py 运行一系列测试时出现导入错误,其中nose 是底层测试运行器。如果我只是在 Python 下运行,测试运行良好。

coverage run run_tests.py
ERROR

======================================================================
ERROR: <nose.suite.ContextSuite context=nova.tests>
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/lorin/nova/hpc-trunk/.nova-venv/lib/python2.6/site-packages/nose/suite.py", line 208, in run
    self.setUp()
  File "/Users/lorin/nova/hpc-trunk/.nova-venv/lib/python2.6/site-packages/nose/suite.py", line 291, in setUp
    self.setupContext(ancestor)
  File "/Users/lorin/nova/hpc-trunk/.nova-venv/lib/python2.6/site-packages/nose/suite.py", line 314, in setupContext
    try_run(context, names)
  File "/Users/lorin/nova/hpc-trunk/.nova-venv/lib/python2.6/site-packages/nose/util.py", line 478, in try_run
    return func()
  File "/Users/lorin/nova/trunk/nova/tests/__init__.py", line 43, in setup
    from nova import context
ImportError: cannot import name context

这似乎不是路径错误,而是当我通过执行“覆盖运行”运行测试时,“nova”模块的子模块似乎不可见。我通过将以下代码添加到失败的方法中发现了这一点:

import nova; print nova.__path__
print dir(nova)

当我运行它时python run_tests.py,我看到以下输出:

['/Users/lorin/nova/hpc-trunk/nova']
['__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__', 
 'api', 'auth', 'compute', 'console', 'context', 'crypto', 'db', 'exception', 
 'fakerabbit', 'flags', 'image', 'ipv6', 'log', 'manager', 'network', 'objectstore', 
 'quota', 'rpc', 'scheduler', 'service', 'test', 'tests', 'twistd', 'utils', 'version', 
 'virt', 'vnc', 'volume', 'wsgi']

但是,当我将其作为 运行时coverage run run_tests.py,我会看到以下输出:

['/Users/lorin/nova/hpc-trunk/nova']
['__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__', 
 'api', 'tests']

似乎它在每种情况下都在同一个地方找到了 nova 模块,但是在我覆盖运行它的情况下,Python 看不到大多数子模块:(auth,compute,...)console。

请注意,当我为鼻子使用覆盖插件时,不会发生此问题,但在这种特殊情况下,我不想使用该插件。

4

1 回答 1

2

这是coverage.py 的问题。当它将当前目录插入到 sys.path 列表中时,它没有使用绝对路径,这不知何故导致了这个问题。Coverage.py 现已修复:https ://bitbucket.org/ned/coveragepy/changeset/811ed58de8a3

于 2011-05-22T01:25:54.233 回答