Ich habe einen sehr einfachen REST-Controller in Symony2 mit Datenbank einfügen / updates / löscht in den Controller-Aktionen erstellt.
Gibt es eine gute Möglichkeit, Unit- / Integrationstests für diese Controller-Aktionen zu schreiben, ohne die Produktionsdatenbank zu verschmutzen? Muss ich mit verschiedenen Umgebungen arbeiten - oder gibt es dafür einen Vorschlag vom Framework-Anbieter?
Aktueller Controller Beispiel:
%Vor%Aktuelles Testbeispiel:
%Vor%Meiner Meinung nach sollten Sie auf jeden Fall die Änderungsdatenbank mit Ihren Tests vermeiden.
Meine Lieblingsmethode ist ein inject entity manager in einem Test-Client. Zum Beispiel:
%Vor%Eine Sache mit dieser Lösung, die Sie beachten sollten, ist, dass Sie Ihren verspotteten Dienst vor jeder Anfrage injizieren müssen. Dies liegt daran, dass der Client einen Kernel zwischen den einzelnen Anfragen neu startet (was bedeutet, dass der Container ebenfalls neu erstellt wird).
bearbeiten:
Mein GET-Ansatz in den Controller-Tests ist, dass ich Entity-Repositories und so weiter vortäuschen kann, um alle Daten aus db auszugeben, aber es ist eine Menge Arbeit und es ist nicht sehr komfortabel, also bevorzuge ich in diesem Fall (ich meine nur wenn wir über den Controller-Test sprechen) tatsächlich echte Daten von db bekommen. Mit echten Daten meine ich Daten, die mit Doktrin-Fixtures erstellt wurden. Und solange wir die Datenbank nicht ändern, können wir uns auf die Fixtures verlassen.
Aber wenn wir über das Ändern von Daten innerhalb von db sprechen (POST / PUT / DELETE-Methoden), verwende ich immer Mocks. Wenn Sie em mock verwenden und entsprechende Erwartungen an die Methoden "perist" und "flush" setzen, können Sie sicher sein, dass die Daten tatsächlich ohne Änderungen der Datenbank erstellt / aktualisiert / gelöscht werden.
Hier ist was ich tue
Fügen Sie in Ihrer Testklasse die statische Variable $ kernel hinzu und erstellen Sie eine Funktion, die den Kernel im Testmodus lädt
%Vor% Und rufen Sie als erste Zeile der Testfunktion self:setUpBeforeClass()
Dadurch lädt symfony die Konfigurationsdatei config_test.yml und Sie können dort eine andere Datenbankverbindung definieren
Tags und Links php symfony phpunit symfony-2.1