nosetests 是否会以不同方式对待具有某些名称的目录? src
目录特殊吗?
如果我有一个源目录名为 src
的项目,则 nosetests
似乎工作正常。但是,如果该目录被命名为其他名称,nosetests
会报告一堆导入错误。
这就是我所做的:
运行测试
~/src$ nosetests .. ---------------------------------------------------------------------- Ran 2 tests in 0.001s OK
重命名目录
~/src$ cd .. ~/$ mv src/ src2
重新运行测试
~/$ cd src2 ~/src2$ nosetests E ====================================================================== ERROR: Failure: ImportError (No module named **whatever**) ---------------------------------------------------------------------- Traceback (most recent call last): ... etc. ... import **whatever** ImportError: No module named **whatever** ---------------------------------------------------------------------- Ran 1 test in 0.001s FAILED (errors=1)
我在文档中找不到与此相关的任何内容。
示例:具有以下目录结构:
.
|-- a
| |-- b.py
| `-- __init__.py
|-- __init__.py
`-- test
|-- a
| |-- __init__.py
| `-- testb.py
`-- __init__.py
所有__init__.py
文件都是空的,a/b.py
的内容是:
y = 3
和test/a/testb.py
:
import a.b
import unittest as u
class TestB(u.TestCase):
def test1(self):
self.assertTrue(True)
def test2(self):
self.assertTrue(False)
我可以可靠地重现这个问题。运行nosetests -V
给出:
nosetests version 1.2.1
最佳答案
快速解决方案是删除 __init__.py
从顶级目录。另一种选择是使用相对导入,例如:替换 import a.b
与 from ...a import b
.
造成这种困惑和诡计的罪魁祸首是 nose importer .
如果您正在运行的目录nosetests
中,是一个包, Nose 不会将其添加到 sys.path
,否则,它将添加它( source )。然后,它向上抛出目录树并递归地应用相同的逻辑。对于所有受影响的文件也是如此。这解释了为什么它不能与 __init__.py
一起使用- 根目录( src2
在你的情况下)不在 sys.path 中 - 这就是包 a
的原因没有找到。
但是,这里的悬而未决的问题是:为什么它第一次起作用,src
文件夹?
src
在本例中,文件夹位于 sys.path 上。可能会有其他答案或编辑。
查看相关问题:
关于python - 使用nosetests 特别命名的目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16174649/