Benutzer-Werkzeuge

Webseiten-Werkzeuge


python:pytest
  • Tests können in Klassen zusammengefasst werden
    • müssen Test<Whatever> heißen
    • Testmethoden heißen test_<Whatever>
    • diese haben kein init
    • Gemeinsame Variablen können nur als Klassenvariablen deklariert werden
    • jeder ausgührte Test hat eine eigene Instanz der Klasse
      • das setzen von Variablen in einem Test beeinflusst also nicht die Ausführung in einem anderen Test

Mocking

Wo gemocked werden muss

  • Muss an der Stelle durchgeführt werden wo das Objekt aus Sicht des zu testenden Objektes im Namensraum auftaucht

# in mymodule

import somemodule

somemodule.a()

  • Um a zu mocken muss somemodule.a gemockt werden
  • in diesem Fall fallen Definitionsort und der Namensraum zusammen

Wenn hingegen

# in mymodule

from somemodule import a

a()

  • muss mymodule.a gemockt werden
    • der Namensraum an den a() gebunden ist ist mymodule
    • a() ist an sich aber (original) in somemodule definiert

Begriffe

Fixture

  • Im Prinzip die Testumgebung bzw. jedes Teil davon
    • im Sinne von Fix → Fest, eine feste/gegebene Umgebung in der der Test läuft
    • darunter fallen Funktionen/Methoden, Resourcen (Datenbanken, Netzwerkverbindungen usw.) die eben diesen Zustand zur Verfügung stellen/darstellen
    • auch Mocks von Funktionsaufrufen und API-Calls

Mock - generell

Funktionen (im Sinne von Objekten, Methoden und Funktionen) rufen häufig andere Funktionen, Variablen/Konstanten oder Attribute von Klassen ab um ihre Arbeit zu tun.
Das ist eine zusätzliche Quelle von Fehlern (da eben diese sich bereits falsch verhalten können) und ggf. „kostenintensiv“ (im Sinne von Rechenleistung und RAM oder Ausführungszeit oder aufwendiger Aufbau nötig).
Um diesen Aufwand zu sparen benutzt man Mocks, im Prinzip Simulationen oder Kartonage-Abbilder die nur die relevanten Werte zurückgeben ohne wirklich irgendwelchen Code auszuführen.

  • Funktionen geben einen definierten Rückgabewert zurück
  • Klassen Attribute haben feste Werte

Dummies

Objekte (was letztendlich auch primitive Datentypen inkludiert) die übergeben werden müssen, aber keinen Einfluss auf das zu testende Objekt haben.
Zum Beispiel Parameter die zum instanzieren einer Klassen nötig sind, aber das Objekt was getestet wird ist eine Funktion der Klasse, die durch eben jenenen Parameter nicht beeinflusst wird/nicht davon abhängt.
Die Klasse ließe sich nur ohne den Parameter nicht instanzieren.

Fake

Implementiert eine Methode oder Klasse die wirklich funktioniert (also wirklich etwas tut), das aber in der Regel auf eine verkürzte Weise tut wie das Original

Stubs

Gibt hart kodierte Rückgabewerte zurück.

Mocks

Zeichnen zusätzlich zu Stubs auf was die Aufruparameter waren.

Spies

Wrapper um das Originalobjekt welches aufgerufen werden soll. Zeichnet nur die Parameter auf mit denen das Objekt aufgerufen wurde.

python/pytest.txt · Zuletzt geändert: 2024/02/23 19:04 von root