Вот моя структура папок:Как работает python «import» при использовании unittest?
.
├── mod
│ └── a.py
└── tests
└── test_a.py
2 directories, 2 files
тесты/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()
Когда я UnitTest, конечно, все в порядке:
$ python -m unittest tests/test_a.py
1
.
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK
Однако , когда я просто запускаю тесты/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, мода становится доступным?
@czheo вы видели этот подобный вопрос http://stackoverflow.com/questions/1896918/running-unittest-with-typical-test-directory-structure Помогло ли это? –
@shafaq Вы имеете в виду модуль unittest, модифицированный «sys.path»? Однако, когда я напечатал sys.path в файле test_a.py, я не нашел, что он изменен. – czheo
Он делает первый путь к элементу [0]. Попробуйте выполнить печать 'print os.path.abspath (sys.path [0])'. Вы увидите, что это даст вам путь к директории 'mod'. Без 'unittest' он перешел бы в' test' каталог. Поэтому '' 'модуль не отслеживается. –