Tipp #1: Globalen Zustand zurücksetzen
Ein Umstand, der das Testen mit Magento erschwert, ist die freizügige Anwendung von globalen Zuständen, in Form von Singletons und Registry. Diese werden auch über Tests hinweg nicht zurückgesetzt, EcomDev_PHPUnit ermöglicht aber das explizite Zurücksetzen mit Annotations.
/** * @singleton checkout/session * @helper tax * @registry current_product */ public function testSomething()
Die Parameter sind jeweils die selben wie für Mage::getSingleton()
, Mage::helper()
und Mage::registry()
.
Es ist zu empfehlen, alle Singletons und Registry-Werte, die im Test genutzt werden zurückzusetzen, nicht erst, wenn es zu Konflikten kommt. Insbesondere für Session-Singletons ist es wichtig, übrigens unabhängig davon ob sie im aktuellen Test gemockt werden oder nicht. Bei zustandslosen Helpern, also solchen ohne eigene Attribute, ist ein Zurücksetzen allerdings nicht notwendig,
4 Replies to “EcomDev_PHPUnit Tipp #1”
Comments are closed.
You can also reset data via fixture file. It actually generates a virtual fixture based on annotations for this functionality.
Thanks for your feedback, highly appreciate it! Right, I saw this at some point, will see if I can update the post with an example.
Ich habe das Problem inzwischen so gelöst, dass ich vor jedem Test mittels Reflection den aktuellen Zustand der Registry speichere und ihn danach wiederherstelle. Zu oft musste ich mich mit vielen vielen Singletons herumschlagen, die Magento tief verborgen einsetzt.