Ich habe ein Paket geschrieben ( Ссылка ), das sowohl mit Python2 als auch mit Python3 läuft. Allerdings musste ich separate (py.test) Einheitentests für Python2 und Python3 schreiben (hauptsächlich, weil ich zusätzliche Funktionen von Python3 testen möchte, insbesondere Schlüsselwort-Argumente), also habe ich eine test_py2.py
und eine test_py3.py
in einem test
Unterpaket. Wenn ich jetzt laufe, sage py.test2 mypkg
, test_py2
, aber test_py3
scheitert mit SyntaxError
. Gleichermaßen, für py.test3 mypkg
, test_py3
besteht, aber test_py2
schlägt fehl (ich könnte diese Aufgabe jedoch ausführen, es ist nur ein Problem von StringIO
, das nach io
verschoben wurde).
Ich kann das test
-Subpaket so gestalten, dass import mypkg.test
nur die richtige Version der Tests importiert, aber py.test interessiert das anscheinend nicht - es sieht nur zwei Dateien mit test_*
und greift alle Tests an Beide ignorieren, was __init__.py
ihm sagt, dass er importieren soll.
Also jetzt muss ich sowohl py.test2 mypkg/test/test_py2.py
als auch py.test3 mypkg/test/test_py3.py
machen. Gibt es eine Möglichkeit, das Ganze so einzurichten, dass py.test2 mypkg
und py.test3 mypkg
"einfach funktionieren"?
Danke.
Wenn Sie Ihre Module dann auf alle Interpreter importieren und Tests überspringen können, ist dies eine gebräuchliche Lösung. Ansonsten kannst du folgendes als "conftest.py" in das Testverzeichnis schreiben:
%Vor%Dadurch wird ein projektspezifisches Plug-in ausgewählt und ein Testmodul mit einem Dateinamen, der eine "py2" - oder "py3" -Teilzeichenfolge enthält, in der falschen Interpreterversion ignoriert. Natürlich können Sie es verfeinern, um eine explizite Liste direkt in der Datei conftest.py zu haben, anstatt den Dateinamen etc.pp. Zu überprüfen.
HTH, holger
Fügen Sie Ihre Tests in verschiedene Pakete ein und führen Sie nur die Tests im entsprechenden Paket aus. Oder laden Sie das entsprechende Testmodul in einem Skript:
%Vor%oder verwenden Sie eine setup.py-Datei, damit Sie
ausführen können python setup.py test
und setzen Sie die Versionslogik dort:
%Vor%Tags und Links python python-3.x py.test