webentwicklung-frage-antwort-db.com.de

Wie führe ich einen einzelnen Test mit Nose in Pylons durch?

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?

141
Ben

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).

222
Antoine Leclair

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.

45
Kee

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.

2

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.

0
Raptor

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"
0
tfga