2014-03-06 13 views
6

Ich habe gerade ein Python-Paket "portiert", das ich an PyCharm schreibe, und habe ein bisschen Probleme beim Ausführen von Komponententests für das gesamte Paket von der IDE.Ausführen von Python-Paketeinheitstests in PyCharm

In __init__.py für das Paket habe ich load_tests Funktion, die über alle Module in der Verpackung und lädt relevante Tests. Es läuft hervorragend mit:

$python -m unittest my_package 

Allerdings, wenn ich es von PyCharm versuchen läuft (durch das Top-Verzeichnis im Projektfenster auswählen und schlagen Strg + + F10 Umschalttaste) I No tests were found im Run-Fenster zu erhalten, und

...\python.exe ...\pycharm\utrunner.py .../my_package/ true 
Testing started at ... 
Process finished with exit code 0 
Empty test suite. 

im Konsolenfenster.

Ich warf einen kurzen Blick auf PyCharms utrunner.py und es scheint, dass es nach Modulen mit einem bestimmten Muster sucht (die mit Test beginnen). Ich möchte den gegenwärtigen Vanilla-Ansatz beibehalten. Wie kann ich PyCharm so konfigurieren, dass load_tests von __init__.py verwendet wird, während der Code so wenig wie möglich geändert wird?

Übrigens, Testsuiten für einzelne Module laufen bei PyCharm gut.

Verwenden von PyCharm 3.1 Community Edition, Python 2.7.

Vielen Dank im Voraus.

Antwort

5

Diese Antwort wurde unter Berücksichtigung von PyCharm 3.4 geschrieben.

hatte das gleiche Problem, Lösung für das Problem in dieser Antwort gefunden, ich hoffe, Ihre Frage verstanden rechts:

https://stackoverflow.com/a/12242021/2427749

ich so meine Python-Test-Runner-Konfiguration konfiguriert:

  • Überprüft 'Alle im Ordner'
  • Muster ist der reguläre Ausdruck '. * _ Test.py' (ohne Anführungszeichen)
  • Überprüft 'Nur Unterklasse für unittest.TestCase prüfen'.

Jetzt ist es mein unitests in meine Unterordner namens findet wie classToBeTested_Test.py

durch die Art und Weise, ich bin vor ein weiteres Problem jetzt: die Unit-Test das Modul getestet werden nicht importieren können. Ursache für unterschiedliche Stammordner denke ich.

+0

Sie fügen in 'Einstellungen> Projektstruktur> einen anderen Stammordner kann Inhaltsstamm hinzufügen ". – simonzack

+1

Nur ein FYI, für andere ... es dauerte eine Weile, aber "Muster" verwendet eine ** Regex **, nicht eine normale Shell-Glob wie '* Test.py'. Wenn man so etwas benutzt, stürzt der Testläufer ab. Ich wusste nicht, dass es eine Regex wollte, bis ich auf die Stack-Spur schaute! –

+0

Ich bin froh, dass du mir den Weg gezeigt hast. –

2

Mit PyCharm 2.016,2 Verwendung:

  • -Test: Script
  • Script: /path/to/tests/__init__.py
  • prüfen Inspizieren nur Subklassen von unittest.TestCase.Dies führt dazu, dass utrunnerunittest.TestLoader.loadTestsFromModule() verwendet und dieser Methodenaufruf load_tests(), falls im Modul vorhanden.

I.e. der Befehl

python C:\python\pycharm\helpers\pycharm\utrunner.py /path/to/tests/__init__.py true 

ich die Tests Verzeichnis aus dem sys.path im __init__.py als auch (siehe PY-15889) entfernen hatte:

basedir = os.path.dirname(__file__) 
try: 
    sys.path.remove(basedir) 
except ValueError: 
    pass