使用nose时的ImportError,使用原生unittest时却没有?

6 投票
4 回答
3101 浏览
提问于 2025-04-15 22:32

我在用Nose运行单元测试的时候遇到了ImportError错误,但如果直接运行测试脚本就没有问题。这里提到的所有文件可以在这个链接查看:http://gist.github.com/395541#

如果我直接运行测试脚本importTest-Test.py,我得到的输出是:

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

但是如果让我Nose来运行,就会出现错误:

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)

涉及到的文件结构是这样的,Nose在处理这些文件时遇到了困难 - 一些文件可以在这里查看: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 / Nose 0.11.3环境下。

如果有人能提供帮助,我将非常感激。

谢谢。

4 个回答

0

看起来你的问题可能是因为文件名中的破折号“-”。你可以参考这个链接了解更多信息:https://stackoverflow.com/a/11055442/1063605

1

你可以试着把顶层文件夹 mmm 中的 __init__.py 文件删掉。

1

默认情况下,nose会对它使用的PYTHONPATH进行一些调整。你可以尝试使用-P这个选项来关闭这种行为。

撰写回答