Hier ist meine Ordnerstruktur:Wie Python "Import" funktioniert tatsächlich bei Verwendung von Unittest?
.
├── mod
│ └── a.py
└── tests
└── test_a.py
2 directories, 2 files
Tests/test_a.py einfach wie folgt aussieht:
import unittest
from mod import a
class ATestCase(unittest.TestCase):
def test_a(self):
print(a.a)
if __name__ == "__main__":
unittest.main()
Als ich Unittest tun, sicherlich alles in Ordnung ist:
$ python -m unittest tests/test_a.py
1
.
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK
jedoch , wenn ich einfach tests/test_a.py als Python-Skript ausführen, passiert der Fehler:
$ 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'
Meine Frage ist, warum Mod mit Unittest importiert werden kann?
@czheo haben Sie diese ähnliche Frage http://stackoverflow.com/questions/1896918/running-unittest-with-typic-test-directory-structure gesehen Hilft das? –
@shafaq Meinst du das unitest Modul modifiziert "sys.path"? Als ich jedoch sys.path in meiner Datei test_a.py ausgedruckt habe, habe ich nicht festgestellt, dass es modifiziert wurde. – czheo
Es führt den ersten Artikelpfad [0] aus. Versuchen Sie, 'print os.path.abspath (sys.path [0])' 'zu drucken. Sie werden sehen, dass es Ihnen den Pfad zum 'mod'-Verzeichnis geben würde. Ohne "unitest" würde es in das "test" -Verzeichnis gehen. Also ist ein Modul nicht nachvollziehbar. –