2010-12-10 6 views
1

Während ich mich selbst im Ruby/Rails-Bereich immer noch für einen Noob hielt, bin ich daran interessiert, eine Meinung darüber zu bilden, wie ich Rails Apps testen möchte - welche Technologien und welche Abdeckungsebene verwenden und wann. Meine derzeitige Politik besteht darin, mit dem Fluss des Projekts, auf dem ich mich gerade befinde, zu gehen, aber das hat inkonsistente Ergebnisse sowohl in Bezug auf die Technologie als auch auf den Grad der Abdeckung gebracht. Die einzige Übereinstimmung war in der Test ersten Entwicklungsstil.Ruby/Rails Testpraktiken

Rspec für Controller, Modelle und Helfer, Gurke für Funktionale (um die erste Entwicklung des Tests zu erleichtern) und füllen mit Test :: Unit für knifflige Bits des Codes? Alle Funktionals mit Gurke? Abandon Test :: Einheit? Test :: Einheit für Modelle und Helfer, und Gurke für alles andere?

Bitte teilen Sie Ihre Meinungen.

Antwort

3

Wenn es darum geht, Anwendungen zu testen, ist eines der wichtigsten Dinge, wichtiger als Ihr Test-Framework oder Ihre Testmethodik, testbaren Code zu schreiben.

Wenn Sie einen testgetriebenen Ansatz zur Entwicklung verwenden, neigen Sie dazu, testbaren Code zu schreiben, aber Sie müssen sich immer noch darauf konzentrieren, sich selbst die richtigen Funktionen zu geben. Das Ziel ist eine transparente Anwendung.

Einige der Dinge zu konzentrieren, sind:

  • Halten Sie Ihre auf eine bestimmte Funktion fokussiert Methoden und klare Hand-off-Punkte zwischen einer Methode und einem anderen bereitstellt.
  • Eine ausreichende Introspektion in die Interna eines Objekts auf Einheitenebene bereitstellen, ohne unnötigerweise zu viel Information auszusetzen.
  • Erstellen von HTML-Dokumenten, die so strukturiert sind, dass sie dem Controller und dem Modellbereich besser entsprechen, indem konsistente Terminologie- und Namenskonventionen angewendet werden.

Ich habe immer geprüft, um zu testen, was ein Magier ähnlich ist. Ein Magier macht klar, was er tut und was die Ergebnisse sind, aber der Prozess selbst wird nicht unbedingt erklärt. Dies ist wie eine Software, bei der Sie die Ergebnisse wissen möchten, aber nicht die Implementierungsdetails beachten sollten.

Eine typische Zauberroutine zeigt Ihnen alle relevanten Details, wie der Darsteller einen Hut trägt, und dass der Hut leer ist, dass nichts in den Ärmeln ist, dass der Hut robust ist und wenig wiegt, und dann Ich werde irgendwie ein Kaninchen aus dem Hut ziehen.

Persönlich neige ich dazu, mich stärker auf das Schreiben von soliden Komponententests zu konzentrieren, und indem ich die Controller dünn halte, weniger auf funktionale Tests. Funktionale Tests können sehr schwierig sein, weil die Anzahl der Zustände, die das System beim Rendern einer Seite haben kann, unglaublich groß ist. Da Sie nur einen kleinen Teil davon testen können, müssen Sie Ihre Validierungen priorisieren.

Integrationstests funktionieren gut für ausgereifte Anwendungen, die gut definiert sind und bei denen die Kosten für einen Defekt sehr hoch sind, aber ansonsten viel mehr Zeit für die Erstellung benötigen als eine disziplinierte, strenge Qualitätskontrolle. Ein schlechter Integrationstest kann zu einem falschen Sicherheitsgefühl führen und die Anwendungsqualität beeinträchtigen.

Wenn Sie eine dedizierte QA-Abteilung haben, die sich auf den Aufbau und die Wartung einer ganzen Reihe von Regressionstests konzentrieren kann, dann ist Integrationstests eine großartige Sache. Für den durchschnittlichen Entwickler bedeutet dies jedoch eine enorme Doppelarbeit und kann die Produktivität erheblich beeinträchtigen. Wie bei vielen Dingen geht es um Kompromisse.

+1

Gute Punkte, nette Analogie über den Magier. Nur ich verlasse mich stark auf Integrationstests (mit Gurken), nicht nur in ausgereiften Anwendungen, sondern um den Fluss zum Laufen zu bringen. Ich sehe alles als Integrationstests, nur auf verschiedenen Ebenen: Draußen ist Gurke, im Inneren sind RSpec-Testmodelle (und manchmal Controller, wenn es mehr als traditionelle Crud-Controller ist), aber jede Spezifikation geht um Verhalten und Verstecke Details unten in der Nahrungskette. – iain