使用unittest时python“import”如何实际工作?

时间:2016-04-29 04:15:43

标签: python

这是我的文件夹结构:

.
├── 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变得可导入?

1 个答案:

答案 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.pytests目录将在路径上,因此找不到a