EcomDev_PHPUnit Tipp #6

Seit Jahren ist das Test-Framework EcomDev_PHPUnit quasi-Standard für Magento Unit Tests. Die aktuelle Version ist 0.3.7 und der letzte Stand der offiziellen Dokumentation ist Version 0.2.0 – seitdem hat sich viel getan, was man leider im Code und GitHub Issues selbst zusammensuchen muss. Diese Serie soll praktische Tipps zur Verwendung sammeln.

Tipp #6: Fixture rollback

Wenn Du Fixtures nutzt, werden die Fixture-Daten aus der Datenbank entfernt, wenn der jeweilige Test durchgelaufen ist. Was dabei zu beachten ist, ist dass es sich hier nicht um einen Transaktions-Rollback handelt, stattdessen werden alle Tabellen die von der Fixture betroffen waren, geleert (truncated).

Das hat einige Implikationen:

  • Man sollte niemals table fixtures mit Tabellen benutzen, die wichtige Core-Daten enthalten, wie z.B. core_config_data oder eav_attribute
  • Daten in Tabellen, die nicht in der Fixture stehen, bleiben bestehen. Man kann das Löschen von Daten, die während dem Test erstellt wurden, mit einer leern Fixture triggern, zum Beispiel für Quotes und Orders:
    tables:
      sales/quote: []
      sales/order: []
    
  • Wenn dieses Verhalten nicht erwünscht ist, sollte man hinter sich selbst aufräumen, also erstellte Daten in einer tearDown Methode löschen.
  • Verlass Dich nicht zu sehr auf Daten, die in der Original-Datenbank vorhanden sind, denn andere Tests können sie mit ihren Fixtures überschreiben und schließlich löschen.
  • Wenn Du shared fixtures mit @loadSharedFixture nutzt, werden alle Daten in den shared fixtures nur einmal erstellt und entfernt. Alle Tabellen, die von einer shared fixture betroffen sind, werden zwischendurch nicht aufgeräumft, auch wenn andere normale Fixtures Daten hinzufügen. Mein Rat: Shared Fixtures nur mit Bedacht einsetzen, besser gar nicht