这是我的文件夹结构:
.
├── mod
│ └── a.py
└── tests
└── test_a.py
2 directories, 2 files
tests / test_a.py看起来像这样:
import unittest
from mod import a
class ATestCase(unittest.TestCase):
def test_a(self):
print(a.a)
if __name__ == "__main__":
unittest.main()
当我进行单元测试时,一切都很好:
$ python -m unittest tests/test_a.py
1
.
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK
但是,当我只是将tests / test_a.py作为python脚本运行时,会发生错误:
$ python tests/test_a.py
Traceback (most recent call last):
File "tests/test_a.py", line 2, in <module>
from mod import a
ImportError: No module named 'mod'
我的问题是为什么使用unittest,mod变得可导入?
答案 0 :(得分:0)
如上所述并讨论了这个问题:Running unittest with typical directory structure
在我看来,最好的解决方案是使用unittest命令行界面,它将目录添加到sys.path中,这样你就不必(在TestLoader类中完成)。
查看文档:{{3}}
在程序启动时初始化时,此列表的第一项path [0]是包含用于调用Python解释器的脚本的目录。
在使用print os.path.abspath(sys.path[0])
时(在功能/方法中)尝试打印python -m unittest tests.test_a
,您会在路径上看到../mod
,这就是a
所在的原因。
现在运行python tests/test_a.py
和tests
目录将在路径上,因此找不到a
。