Sie haben 2 kleine Probleme hier. Erstens, Sie führen Ihren Testbefehl aus dem falschen Verzeichnis und zweitens haben Sie Ihr Projekt nicht richtig strukturiert.
Normalerweise versuche ich, wenn ich ein Python-Projekt entwickle, alles im Fokus des Projekts zu halten, was in Ihrem Fall hello_python/
wäre. Python hat das aktuelle Arbeitsverzeichnis standardmäßig auf seiner Laststrecke, also wenn Sie ein Projekt wie dieses haben:
hello_python/
hello/
hello.py
__init__.py
test/
test_hello1.py
test_hello2.py
# hello/hello.py
def do_hello():
return 'hello'
# test/test_hello.py
import unittest2
from hello.hello import do_hello
class HelloTest(unittest2.TestCase):
def test_hello(self):
self.assertEqual(do_hello(), 'hello')
if __name__ == '__main__':
unittest2.main()
Zweitens test
ist kein Modul gerade jetzt, da Sie die __init__.py
verpasst haben in dieses Verzeichnis. Sie sollten eine Hierarchie haben, die wie folgt aussieht:
hello_python/
hello/
hello.py
__init__.py
test/
__init__.py # <= This is what you were missing
test_hello1.py
test_hello2.py
Wenn ich versuche, dass auf meinem Rechner, läuft python -m unittest test.hello_test
gut für mich funktioniert.
Sie können feststellen, dass dies noch ein wenig umständlich ist. Ich würde dringend empfehlen, nose zu installieren, mit dem Sie einfach nosetests
von Ihrem Projektstamm aufrufen können, um alle Ihre Tests automatisch zu finden und auszuführen - vorausgesetzt, Sie haben die richtigen Module mit __init__.py
s.
Das Importieren in Tests unterscheidet sich nicht vom Importieren in anderem Code. In deinem Fall würdest du 'von hallo.hello import do_hello' machen. –
Danke. Ich hab es geschafft. Jetzt laufen die Tests in 'PyCharm'. Wenn ich jedoch einen Test in der Befehlszeile 'python -m unittest test_hello_server' im aktuellen Verzeichnis' test' starte, habe ich 'ImportError: Kein Modul namens hallo_server.hello_server'. – Michael
Da das übergeordnete Verzeichnis nicht im Pythonpfad enthalten wäre. Stattdessen sollten Sie von "hallo_python" ausgehen und "python -m unittest test.test_hello" oder was auch immer machen. –