Ich arbeite noch an PHP-Unit-Tests zum Testen meiner Symfony2-Controller. Meine Testklassen sind Ableitungen von WebTestCase und die Tests machen GET- oder POST-Anfragen überprüfen, ob alles in Ordnung ist. Ich möchte alle darunter liegenden Schichten testen, aber ich möchte meine Datenbank nicht mit den Tests vermasseln. Ich möchte keine Mock-Ups verwenden, sondern eine In-Memory-SQLite-Datenbank, in der ich ein Testszenario einrichten kann, um alle Änderungen zu überprüfen. Ich habe eine Menge Hinweise gefunden, wie man das mit Doktrin 1.x macht, aber sie funktionieren nicht mehr. Deshalb möchte ich etwas wie folgt aus:Symfony/Doctrine UnitTests mit SQLite-Speicher DB
class BlahblahTest extends WebTestCase {
public function testXXXYYY() {
// 1. Setup a new database with SQLite:memory:
// 2. create the database and all tables according the entities in my project
$this->createTestScenario(); // 3.
$crawler = $this->client->request('GET', '/testpage'); // 4.
// 5. Lots of checks against the database and/or the $crawler data
}
}
Jede Chance, diese Arbeit zu bekommen?
Vielen Dank im Voraus Hennes
Hallo, Melvin. Zuallererst, ja, das würde funktionieren. Aber das Ändern des Quellcodes ist nicht meine bevorzugte Methode, da diese Tests automatisch auf einem dedizierten Server laufen sollten. Die Standardverbindung darf also nicht manipuliert werden, aber es wäre in Ordnung, eine zweite Verbindung zu haben. Die Tests selbst sollten ihre Standardverbindung programmgesteuert ändern. Es muss einen Weg geben, dies zu tun. Hennes. – Hennes
Nicht sicher, ob Sie das verstehen, also könnte das eine dumme Bemerkung sein. Aber wenn Sie Unittests ausführen, sollte Symfony den Test env verwenden. Mein Beispiel läuft zum Beispiel perfekt auf einem jenkins-Server und einer Produktion, da die Konfiguration nur geändert wird, wenn der Test env gesetzt ist. Die Datei config_test.yml wird als Überschreibung für config.yml geladen, damit sich Ihre Konfiguration für die Produktion nicht ändert. – melvin
Ah, meine Schuld, tut mir leid. Ich wusste nicht, dass Unit-Tests automatisch die Testumgebung auswählen. Also habe ich meinen sqlite-Treiber in der config_test.yml wie du erwähnt implementiert. Funktioniert gut. Vielen Dank. – Hennes