Ich habe eine komplexe Backend-Anwendung, die zf 1.11.11 und phpunit 3.5.15 verwendet. Die Anwendung hat einige komplexe Kommunikationskomponenten (soap, rest, etc.). In der CIS- oder Dev-Testumgebung muss ich diese Modelle nachbilden, da ich keine Verbindung oder Anfrage zu den produktiven Drittanbieter-Backends herstellen kann. Mit Mocking funktioniert die Unittest-Schicht also sehr gut. Volle Abdeckung - kein Problem. Das Problem ist, dass ich diese Technik nicht während der Controller-Integrationstests verwenden kann. Es ist eine höhere Schicht, die die Modelle komplett ausblendet. Daher ist es wohl unmöglich, Mocks an dieser Stelle zu injizieren. Auf der einen Seite ist dies richtig und gut, weil es die Natur von Integrationstests ist, auf der anderen Seite erhalte ich eine sehr geringe Abdeckung auf den Controller-Tests.
Zusammenfassung des Problems:
- Ich kann keine Testdienste erstellen, die mit den Komponenten kommunizieren (hohe Kosten)
- Ich kann während des Controllertests keine Komponenten-Mocks injizieren (ich setze nur Anfragedaten und löse den Dispatcher aus)
- Meine Abdeckung des Controllers ist viel zu gering
Ich habe eine Lösung gesehen, die alles als Plugin implementiert. So dass einige Namespace Redirecting kann auf die Mock-Plugins zeigen. Aber ich glaube nicht, dass dies eine gute Lösung ist.