2010-05-10 19 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上下文菜单)运行单个测试文件,并且感觉非常困惑,因为他们为什么以这种方式工作,但不是在由全测试跑步者。

相关问题