Python Testing
Last updated
Was this helpful?
Last updated
Was this helpful?
Das Testen hat bei untypisiertem Sprachen wie Python einen noch hĂśheren Stellenwert, da viele Fehler nicht vom Compiler entdeckt werden kĂśnnen, sondern erst zur Laufzeit auftreten.
In folgendem Beispiel
tritt der Fehler int(name)
erst in Erscheinung, wenn ich den Namen Pierre
eingebe. Um dieses Problem zu lĂśsen benĂśtigt man viele Tests ... oder einen intelligenten Editor, der Python-Wissen hat und diese Probleme erkennen kann.
Der intelligente Editor hilft allerdings nur, wenn man konsequent Type Hints verwendet. Das ist ABOSULUT empfohlen ... nur nicht um Fehler zu vermeiden, sondern auch um den Komfort zu erhĂśhen, wenn man Code schreibt.
Prinzipiell kann man die __main__.py
eines Pakets verwenden (oder jedes beliebige Python-Modul), um Test-Code auszufĂźhren. Hierin kĂśnnte man dann
verwenden, um die Tests auszufĂźhren.
Allerdings sollen Tests i. a. nicht bei dem ersten Fehler zu einem Abbruch fĂźhren, sondern alle Tests ausfĂźhren und ganz am Ende eine Statistik zeigen ... mit einem entsprechenden Fehlerreport.
Hier kommen Testrunner ins Spiel, die in einem Test-Framework/Library enthalten sind:
unittest
nose2
pytest
Bei diesem Test-Framework muĂ man die Tests in Klassen schreiben, die von unittest.TestCase
erben. Dadurch erhält man aber auch den Komfort von setUp()
und tearDown()
Methoden.
Die
pytest
Tools fĂźhren auchunittest
-Library-Tests aus.
Im Gegensatz zu unittest
mĂźssen die Tests nicht in eine Klasse gepackt werden ... es genĂźgt:, sondern nur als Funktion
Auf diese Weise werden alle Tests unterhalb des aktuellen Verzeichnisses ausgefĂźhrt.
Folgende FiltermĂśglichkeiten stehen zudem zur VerfĂźgung:
Name-Based-Filtering mit -k
-Parameter
Test-Categories mit -m
-Parameter
wiederverwendbarer Initialisierungscode ... ein Test erhält die Fixture als Parameter.
Man kann Fixtures in eine Datei mit dem Namen conftest.py
auslagern und die stehen allen Tests im gleichen Verzeichnis oder darunter zur VerfĂźgung.
pytest
läĂt sich Ăźber Plugins erweitern ... beispielsweise um Helper fĂźr bestimmte Frameworks (z. B. Django)
Auf diese Weise kann man testen, ob sich ein Package auf verschiedenen Python-Versionen installieren läĂt - zudem laufen die Tests auch alle auf den definierten Python-Versionen.
sehr zu empfehlen ... hab ich gelesen ...
Parametrisierung ist ein nettes Feature, um Test-Code zu reduzieren ()