Mock MySQL DB für PHPUnit

8

Ich versuche Einheitentests für mein Yii-Projekt zu erstellen.

Problem: MySQL-Datenbank. Ich möchte nicht jedes Mal eine MySQL-Datenbank ausführen müssen, wenn ich die Tests durchführe, da es langsam, unzuverlässig ist, vielleicht haben einige Teammitglieder es nicht eingerichtet, usw.

Es scheint einen Weg zu geben, eine SQLite-DB im Speicher zu erstellen und diese zu verwenden, aber das von Yii erzeugte SQL scheint nicht auf SQLite zu funktionieren, dasselbe wie auf MySQL. Ich bekomme viele Fehler.

Kurz gesagt: Ich möchte eine MySQL-Datenbank im Gedächtnis spotten.

Wie kann ich das tun?

    
MrB 10.08.2011, 16:51
quelle

2 Antworten

5

Verkapseln Sie Ihre MySQL-Operationen in einem Datenzugriffsobjekt . Sie verstecken nicht nur die SQL aus Ihrer Geschäftslogik, die andere Vorteile hat, Sie können Mock DAOs verwenden, wenn Sie den Rest von die Anwendung. Mocks benötigen keine Datenbank und ermöglichen es Ihnen, zu überprüfen, ob die Geschäftslogik die richtigen Aufrufe an die Datenschicht vornimmt.

Dies ist ähnlich zu Mchls Antwort, bewegt sich aber um eine Ebene. Ich finde es viel einfacher, findUserByEmail() als die verschiedenen mysqli -Methoden vorzuspielen. Sie können die SQL-Überprüfung den DAO-Tests überlassen und in Ihren Integrationstests für die Datenbank ausführen.

    
David Harkness 11.08.2011, 01:47
quelle
1

Eine Möglichkeit besteht darin, Ihr Verbindungsobjekt zu überspielen und zu überprüfen, ob die Methode query() mit erwartetem SQL aufgerufen wird. Sie müssen einen anderen Weg finden, um zu validieren, dass die SQL, die Sie erwarten, korrekt ist. Dies kann als eine separate Gruppe von Tests durchgeführt werden (oder sogar außerhalb Ihrer Testsuite verschoben werden), so dass es nicht mit allen anderen Tests ausgeführt wird.

    
Mchl 10.08.2011 16:59
quelle

Tags und Links