2010-05-10 33 views
6

當使用鼻子運行我的unittests時,我得到一個ImportError,而當我只是單獨運行它時,我不會。這裏提到的所有文件可能在http://gist.github.com/395541#使用鼻子導入錯誤,沒有使用原始unittest的ImportError?

如果我運行測試腳本,importTest-Test.py,直接我得到這樣的輸出:

C:\usr\x\data\src\Python\mmm>python importTest-Test.py 
In mmdb 
In BusinessLogic 
[] 
. 
---------------------------------------------------------------------- 
Ran 1 test in 0.001s 

如果我讓鼻子運行它,我得到一個錯誤:

C:\usr\x\data\src\Python\mmm>nosetests.exe 
E 
====================================================================== 
ERROR: Failure: ImportError (No module named mmdb.DataAccess.AttemptDB) 
---------------------------------------------------------------------- 
Traceback (most recent call last): 
    File "c:\bin\installed\python2.6\lib\site-packages\nose-0.11.3-py2.6.egg\nose\loader.py", line 382, in loadTestsFromName 
    addr.filename, addr.module) 
    File "c:\bin\installed\python2.6\lib\site-packages\nose-0.11.3-py2.6.egg\nose\importer.py", line 39, in importFromPath 
    return self.importFromDir(dir_path, fqname) 
    File "c:\bin\installed\python2.6\lib\site-packages\nose-0.11.3-py2.6.egg\nose\importer.py", line 86, in importFromDir 
    mod = load_module(part_fqname, fh, filename, desc) 
    File "C:\usr\x\data\src\Python\mmm\importtest-Test.py", line 2, in <module> 
    import importtest 
    File "C:\usr\x\data\src\Python\mmm\importtest.py", line 1, in <module> 
    from mmdb.BusinessLogic.AttemptManager import AttemptManager 
    File "C:\usr\x\data\src\Python\mmm\mmdb\BusinessLogic\AttemptManager.py", line 1, in <module> 
    from mmdb.DataAccess.AttemptDB import AttemptDB 
ImportError: No module named mmdb.DataAccess.AttemptDB 

---------------------------------------------------------------------- 
Ran 1 test in 0.002s 

FAILED (errors=1) 

鼻子有問題的包裝中的文件有以下結構 - 有些可能在這裏看到http://gist.github.com/395541#。:

mmm\importtest-Test.py 
mmm\importtest.py 
mmm\mmdb 
mmm\__init__.py 
mmm\mmdb\BusinessLogic 
mmm\mmdb\BusinessObject 
mmm\mmdb\DataAccess 
mmm\mmdb\__init__.py 
mmm\mmdb\BusinessLogic\AttemptManager.py 
mmm\mmdb\BusinessLogic\Collections 
mmm\mmdb\BusinessLogic\__init__.py 
mmm\mmdb\BusinessLogic\Collections\__init__.py 
mmm\mmdb\BusinessObject\__init__.py 
mmm\mmdb\DataAccess\AttemptDB.py 
mmm\mmdb\DataAccess\__init__.py 

這發生在Win32/Python 2.6 /鼻子0.11.3上。

我會很感激任何幫助。

謝謝。

+2

你有沒有想過你的問題?我有一個非常類似的問題,並沒有能夠解決它。 – Aaron 2011-12-13 18:58:37

回答

1

默認情況下,鼻子操縱它使用的PYTHONPATH。您可以嘗試使用-P開關關閉此行爲。

+0

非常感謝您的回覆,我很感激。不幸的是,當我做「nosetests.exe -P」時,輸出和以前一樣 – shearichard 2010-05-10 04:29:05

0

這是涉及的PyUnit一個非常具體的用例答案。

我有一套單元測試在PyDev下正常運行。有一天,我犯了一個打字錯誤,PyDev爲熊貓包的一部分添加了一個自動導入。我通常保留我的代碼摺疊,所以我沒有看到這一點馬上。

出現在測試集後面部分的錯誤是「錯誤:無法導入鼻子」。

在調試中,我發現數據文件名有一個子目錄名重複。看起來測試運行者正在將工作目錄更改爲包含.py文件的子目錄,但不會返回到項目目錄。調用os.path.realpath(「_ file _」)來設置數據文件路徑是返回測試子目錄而不是預期的項目目錄,最終導致數據未找到並且測試失敗。

「修復」設置數據文件路徑的代碼解決了此錯誤。但是,當我通過其餘的錯誤工作時,我發現並刪除了不需要的導入語句。此時,數據文件路徑開始出現錯誤,因此我將其更改回原始格式,並且一切正常。

所以......如果你發現你突然得到這些「鼻子」錯誤,可能是因爲你的編輯無意中引入了一個導致PyUnit無法響應的導入語句。

我在這裏添加了答案,因爲我的部分經驗是使用raw unittest(來自PyDev上下文菜單)運行單個測試文件,並且感覺非常困惑,因爲他們爲什麼以這種方式工作,但不是在由全測試跑步者。

相關問題