2008-09-01 14 views
1

Ist es möglich, einen Wechsel zwischen den Testmethoden zu haben? Wenn ja, wie kann ich das tun?Kann ein Fixture dynamisch zwischen den Testmethoden in CakePHP geändert werden?

Meine Syntax für dieses Problem:

Im cakephp Rahmen i für einen Verhaltenstest sind Gebäude, das durch Hinzufügen von Feldern in die Tabelle konfiguriert ist. Dies soll genauso funktionieren, wie das Hinzufügen der Felder "Erstellter" und "Modified" diese Felder beim Speichern automatisch ausfüllt.

Um dies zu testen, könnte Dutzende von Fixtures/Modell Combos erstellen, um die verschiedenen Setups zu testen, aber es wäre hundert Mal besser, schneller und einfacher, nur die Fixture "Form" zwischen Testmethoden zu ändern.

Wenn Sie nicht vertraut mit dem CakePHP framework sind, können Sie vielleicht helfen Sie mir noch, wie es SimpleTest verwendet

Edit: umformuliert Frage allgemeiner sein

Antwort

0

Ich bin nicht vertraut speziell mit CakePHP, aber so etwas scheint überall mit Fixtures zu passieren.

Es gibt keine in Art und Weise in Schienen zumindest aufgebaut wird dies geschehen, und ich denke nicht in CakePHP oder anderswo, entweder weil die ganze Idee einer Leuchte ist, dass es fixiert ist

Es gibt 2 ‚anständig‘ Abhilfen ich bin mir dessen bewusst

  • schreiben changefixture Methode, und kurz bevor Sie tun, um Ihr behauptet/etc, führen Sie es mit den Parametern von dem, was zu ändern. Es sollte gehen und die Datenbank aktualisieren oder was auch immer zu tun ist.

  • gar Verwenden Sie keine Vorrichtungen und eine Art von Objekt Fabrik oder Objekt-Generator benutzen, um Ihre Objekte jedes Mal

0

Das ist keine Antwort auf meine quetion zu schaffen, sondern eine Lösung für mein Beispiel ausgeben.

Anstatt mehrere Fixtures zu verwenden oder die Fixtures zu ändern, bearbeite ich die Model :: _ Schema-Arrays, indem ich die Felder entferne, die ich testen möchte. Dies hat zur Folge, dass das Modell so wirkt, als ob die Felder nicht vorhanden wären, aber ich bin mir nicht sicher, ob dies ein 100% Test ist. Ich denke nicht, dass es für alle Fälle gilt, aber es funktioniert für mein Beispiel.