Wie testet man MVC-Klassen?

8

Ich bin neu im Komponententest, wollte es aber im MVC-Muster implementieren (mit PHP). Jetzt bin ich mir nicht sicher, wie ich das angehen soll.

Sollte Komponententests in das Framework integriert werden, oder wir erstellen einfach einen neuen Ordner namens tests und fügen alle erforderlichen Klassen und Unit-Tests hinzu, jeweils?

Kurz gesagt, wenn es ein Modell M gibt, hat es auch eine gewisse Kopplung mit dem Framework selbst. Um also das Modell zu testen, sollte ich einige Teile des Frameworks in die Komponententests einbeziehen?

Gibt es einige gute Codebeispiele, wie man das erreichen kann?

    
Nemo 18.06.2011, 15:21
quelle

3 Antworten

7
  

Sollte Komponententests in das Framework integriert werden, oder wir erstellen einfach einen neuen Ordner namens tests und fügen alle erforderlichen Klassen und Unit-Tests hinzu, jeweils?

Sie sollten auf jeden Fall einen separaten Ordner dafür erstellen. Das Aufräumen von Produktionscode mit Tests ist aus Gründen der Leistung und des Debuggens im Allgemeinen keine gute Idee.

  

Soll ich also zum Test des Modells einige Teile des Frameworks in die Komponententests einbeziehen?

Am wenigsten, desto besser. Komponententests sollten wenig bis keine Abhängigkeiten erfordern. Wenn die Klasse A von B abhängt, sollten Sie B vortäuschen, um sicherzustellen, dass B nicht fehlschlägt, wenn A fehlschlägt.

Der Hauptvorteil von Komponententests (wenn sie korrekt ausgeführt werden) besteht darin, dass Sie das Problem einfach lokalisieren können. Wenn A wegen seiner Abhängigkeit B fehlschlägt, sehen Sie zuerst A , dann B . Auch wenn B von C abhängt und C fehlschlägt, müssen Sie in A , B und dann C suchen. Dies ruiniert einen der größten Vorteile von Unit Testing. Wenn alle Tests ordnungsgemäß durchgeführt wurden, führt ein Fehler in C nirgends zu einem Fehler in C . Sie müssen also eine einzelne Klasse suchen, um das Problem zu beheben.

Um Ihren Code wirklich fehlerfrei zu machen, können Sie Komponententests in Verbindung mit PHP-Assertionen verwenden:

%Vor%

Übrigens gibt es keinen Unterschied zwischen Unit Testing MVC im Gegensatz zu Unit Tests im Allgemeinen.

    
netcoder 18.06.2011, 15:33
quelle
1
  

Sollte ein Komponententest in die   Rahmen, oder wir erstellen nur ein neues   Ordner namens Tests

Wenn Sie ein Framework eines Drittanbieters verwenden, enthält es in der Regel einige Testhelfer, aber Sie sollten Ihre eigenen Testklassen in einen separaten Ordner legen, damit Sie (z. B.) eine Version Ihres Software für die Verteilung, die sie nicht enthält.

  

enthalten alle notwendigen Klassen und Unit-Test jeweils?

Sie haben in der Regel eine Testklasse pro Anwendungsklasse. Wenn Sie also eine Modellklasse M haben, haben Sie eine Testklasse M_Test (oder die von Ihnen verwendete Namenskonvention).

Wenn Sie PHPUnit noch nicht kennen, sollten Sie es sich ansehen und ihre Dokumente lesen.

    
Alex Howansky 18.06.2011 15:32
quelle
1

Unit Testing sollte Teil des MVC-Frameworks sein. Schauen Sie sich zum Beispiel das Kapitel zum Testen von Einheiten im CodeIgniter-Benutzerhandbuch an.

>     
Justin Ethier 18.06.2011 15:24
quelle