Ich habe eine Pylons 1.0-App mit einer Reihe von Tests im Test-/Funktionsverzeichnis. Ich bekomme seltsame Testergebnisse und möchte nur einen einzigen Test ausführen. Die Nase-Dokumentation besagt, ich sollte in der Befehlszeile einen Testnamen übergeben können, aber ich bekomme ImportErrors, egal was ich mache
Zum Beispiel:
nosetests -x -s sometestname
Gibt:
Traceback (most recent call last):
File "/home/ben/.virtualenvs/tsq/lib/python2.6/site-packages/nose-0.11.4-py2.6.Egg/nose/loader.py", line 371, in loadTestsFromName
module = resolve_name(addr.module)
File "/home/ben/.virtualenvs/tsq/lib/python2.6/site-packages/nose-0.11.4-py2.6.Egg/nose/util.py", line 334, in resolve_name
module = __import__('.'.join(parts_copy))
ImportError: No module named sometestname
Ich bekomme den gleichen Fehler für
nosetests -x -s appname.tests.functional.testcontroller
Was ist die richtige Syntax?
nosetests appname.tests.functional.test_controller
sollte funktionieren, wobei die Datei test_controller.py
heißt.
Um eine bestimmte Testklasse und Methode auszuführen, verwenden Sie einen Pfad der Form module.path:ClassNameInFile.method_name
, d. H. module.path
ist der relative Pfad zur Datei (z. B. tests/my_tests.py:ClassNameInFile.method_name
).
Für mich mit Nosetests 1.3.0 funktionieren diese Varianten (aber stellen Sie sicher, dass Sie __init__.py
im Testordner haben)
nosetests [options] tests.ui_tests
nosetests [options] tests/ui_tests.py
nosetests [options] tests.ui_tests:TestUI.test_admin_page
Beachten Sie diesen einfachen Doppelpunkt zwischen dem Modulnamen und dem Klassennamen.
Ich muss die Dateierweiterung ".py" hinzufügen, d. H.
r'/path_to/my_file.py:' + r'test_func_xy'
Vielleicht liegt das daran, dass ich keine Klassen in der Datei habe. Ohne den .py
beschwerte sich die Nase:
Callable test_func_xy kann nicht in Datei/Pfad_zu/Meine_Datei gefunden werden: Datei ist nicht ein Python-Modul
Und dies obwohl ich einen __init__.py
im Ordner /path_to/
habe.
Folgendes hat bei mir einfach gut funktioniert:
nosetests test_file.py:method_name
Beachten Sie, dass meine Tests nicht in einer Klasse waren. Testmethoden waren in einer einzigen Datei.
Ich habe dieses kleine Skript geschrieben, basierend auf den vorherigen Antworten:
#!/usr/bin/env bash
#
# Usage:
#
# ./noseTest <filename> <method_name>
#
# e.g.:
#
# ./noseTest test/MainTest.py mergeAll
#
# It is assumed that the file and the test class have the _same name_
# (e.g. the test class `MainTest` is defined in the file `MainTest.py`).
# If you don't follow this convention, this script won't work for you.
#
testFile="$1"
testMethod="$2"
testClass="$(basename "$testFile" .py)"
nosetests "$testFile:$testClass.test_$testMethod"