2011-05-20 47 views
1

當我使用coverage.py運行一組測試,其中nose是潛在的測試運行器時,我得到一個導入錯誤。如果我只是在Python下運行,測試運行良好。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 

這似乎並不成爲一個路徑錯誤,而不是看起來像「新星」模塊的子模塊是不可見的,當我跑做「覆蓋運行」測試。我發現了這一點,通過添加以下代碼這是失敗的方法:

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'] 

好像它的發現在每種情況下在同一個地方的新星模塊,但在我與覆蓋範圍,P運行情況ython沒有看到大多數的子模塊:(auth,compute,...)控制檯。

請注意,這個問題不會發生,當我使用覆蓋插件的鼻子,但在這種特殊情況下,我不想使用插件。

回答