2016-04-25 9 views
4

Ich habe ein Python-Paket, in dem alle meine unittest-Testklassen in Modulen in einem Unterpaket mypkg.tests gespeichert sind. In der Datei tests/__init__.py habe ich eine Funktion namens suite. Ich führe normalerweise diese Tests durch, indem ich python setup.py test nenne, das test_suite='satpy.tests.suite' hat. Ist es möglich, diese Testsuite von pycharm aus zu betreiben?PyCharm run uniquests auswählen

Der Grund, warum ich die Suite-Funktion habe, ist, dass sie nur Tests enthält, die aus meiner fortlaufenden Integration ausgeführt werden können, aber andere fehlgeschlagene Tests im Verzeichnis vorhanden sind (aus älteren Versionen des Pakets). Ich könnte auch sehen, dass dies nützlich für die Auswahl schneller Unittests im Vergleich zu lang andauernden Tests ist. Ich habe versucht, als Skript zu laufen, funktioniert als nosetest oder unittest Konfigurationen. Ich habe versucht, if __name__ == "__main__": und andere Arten der Ausführung von Befehlszeilenmethoden ohne Erfolg hinzuzufügen.

Gibt es eine Möglichkeit, nur einige Tests von einer Pycharm-Laufkonfiguration auszuführen?

+0

Die beste Problemumgehung, die ich gefunden habe, ist 'von mypkg.tests.test_one import *' am Anfang von 'tests/__ init __. Py' und dann Tests als Skript in der pycharm unittest Konfiguration auszuführen. – daveydave400

Antwort

0

Die Python Unittest-Konfiguration von Pycharm verwendet unittest.TestLoader im Hintergrund, um die Tests zu laden. Jetzt versucht Pycharm tatsächlich, die Testfälle automatisch zu sammeln, weiß aber nicht, wie er mit TestSuite-Instanzen umgehen soll und noch weniger Funktionen, die solche Instanzen zurückgeben.

Eine Abhilfe für das Problem ist die load_tests Funktion, um Ihre tests/__init__.py Datei, wie folgt hinzuzufügen:

def load_tests(loader, tests, pattern): 
    return suite() 

Dann in der PyCharm Konfigurationselement, wählen 'Script' und tests/__init__.py

Die load_tests geben Funktion sagt dem Testlader, welche Tests im Modul verfügbar sind :)

Weitere Informationen zu diesem raffinierten Trick finden Sie hier: https://docs.python.org/2.7/library/unittest.html#load-tests-protocol

Vorsicht, es funktioniert nur mit Python 2.7 und höher.