2010-12-13 8 views
7

Ich habe ein paar Apps, die ich zurückgehen möchte und rückwirkend eine Testsuite (RSpec & Gurke) für, aber es ist ein wenig entmutigend, um diesen Prozess gestartet zu bauen.Schienen: Gutes Verfahren, um Tests nachträglich hinzuzufügen?

Was wäre Ihr Prozess für den Rückgriff auf eine bestehende App und den Aufbau einer Testsuite dafür?

+1

+1, weil ich mir die gleiche Frage gestellt habe –

Antwort

0

Ich fing vor kurzem an, das Hinzufügen von Tests zu einem Bündel altem Code selbst, und was ich immens hilfreich fand, ist rcov (ich störe nicht mit dem rcov rails plugin und einfach cd, um ein kleines Shellskript zu testen und auszuführen, das rcov mit den richtigen Ausnahmen ausführt und den Bericht öffnet, wenn alle Tests bestanden werden.) Dann habe ich begonnen, diejenigen anzugehen, die der 100% igen Abdeckung am nächsten kamen Prozentsätze Stück für Stück. Es ist viel mehr messbarer Fortschritt als "Ugh, wo fange ich an, Tests dafür hinzuzufügen ?!"

+0

Toller Vorschlag und wirklich hilfreich! – Shpigford

0

Ich habe eine Menge davon in letzter Zeit für Kundenprojekte gemacht. Die größten Blöcke für mich scheinen die grassierende Verwendung von Inline-Javascript mit oder ohne RJS zu sein. [Randnotiz: Es gibt eine richtige und eine falsche Art, AJAX zu machen, und die meisten Leute tun es falsch.] Ich benutze Gurken normalerweise stark mit ein bisschen Rspec für seltsame Unit-Tests.

Die zu berücksichtigenden Variablen sind vielfältig, aber ein guter Ausgangspunkt sind einige Komponententests für Ihre Modelle. Erstellen Sie einige Factories und testen Sie Ihre Validierungen, zusammen mit allen benutzerdefinierten Verhaltensweisen, die Sie testen möchten.

Wenn Sie nicht daran interessiert sind oder bereits eine Reihe von Komponententests haben und Integration hinzufügen möchten, ist die nächste Frage, inwieweit Sie viel Inline-Javascript oder RJS machen. Wenn Ihre App sehr "ajaxy" ist, müssen Sie mit dem Selen-Treiber für Gurke beginnen, die langsam wie Melasse im Februar ist, aber es wird die Arbeit erledigt. Sobald Sie eine Suite von Tests haben, die die volle Funktionalität (oder sogar nur die wichtigen Sachen) für Ihre Anwendung abdecken, würde ich anfangen, das Javascript zu refactrusieren, um unauffällig zu funktionieren.

andere Richtung man gehen könnte, wäre zusätzliche rspecs für Ihre Controller und Ansichten zu bauen, aber ich weiß nicht wirklich, wie dieses Muster, wie Sie in der Prüfung die Implementierung anstelle der Funktionalität bekommen.

Die wichtige Sache zu erinnern ist, dass es nicht alles über Nacht geschehen muss. Analysieren Sie Ihre Arbeitsabläufe (z. B. Anmelden, Ausführen von Aufgabe A, Ausführen von Aufgabe B usw.) und bestimmen Sie, welche Bereiche 80% Ihrer typischen Anwendungsfälle abdecken. Testen Sie diese zuerst. Dann benutze etwas wie metric_fu oder einfach nur rcov (oder jedes andere Coverage-Tool) und finde Bereiche deines Codes, die logisch dicht und ungetestet sind. Ich mag Metric_fu dafür, weil die Suite von Tools, die es ausführt, Ihnen beide dieser Informationen geben kann.

4

Ich würde gehen und Highlevel-Tests (Gurke) zuerst hinzufügen. Dies gibt Ihnen die Sicherheit, dass sich das Verhalten nicht unbemerkt ändert. Ich würde nicht gehen und rspec Tests hinzufügen (oder vielleicht nur ein paar wichtige), weil Sie wahrscheinlich auch viel umgestalten wollen.

Dann führen Sie metrics. MetricFu hat kürzlich eine Metrik mit dem Namen "HotSpots" erhalten, die andere Metriken kombiniert und auf die größten Problempunkte im Code verweist. Diese Orte sind normalerweise auch die kritischsten für Ihre Anwendung. Fix sie gerade genug, so dass es lesbar ist und Sie ein gutes Gefühl dafür bekommen, worum es geht. Gehen Sie noch nicht über Bord.

Fügen Sie dann für jedes neue Feature, das Sie hinzufügen, Spezifikationen hinzu und bereinigen Sie den Code, mit dem Sie interagieren. Testen und refaktorieren Sie die Abhängigkeiten neuer Funktionen, aber gehen Sie nicht darüber hinaus. Mach es in kleinen Brocken oder du verlierst schnell die Hoffnung.

0

Ich bin ein wenig off topic hier, aber trotzdem ...

Ich denke, Unit-Tests von Modellen in Schienen (3 zumindest) Art wertlos ist ... ich meine vor allem, wenn der Code geschrieben wird Also tust du nicht TDD. Sie möchten Ihre Validierung testen? Warum ? Lesen Sie einfach den Code und Sie werden Fehler selbst herausfinden. Ich sage, dass Schienen (an irgendeiner Stelle) eine solche menschliche Syntax bieten, dass es eine Schande wäre, sie zu testen.

Meiner Meinung nach ist solch eine Syntax selbst eine Spezifikation. Warum also Test schreiben?

Und nur um klar zu sein: Nein, ich sage nicht, Tests sind nutzlos die ganze Zeit. Ich arbeite nicht in irgendeiner zufälligen Netzagentur ...: p

+0

Ich verstehe Ihre Sicht. Wenn Sie sich jedoch nicht sicher sind, fügen Sie Spezifikationen hinzu. Wenn es das Verhalten Ihrer Anwendung ist, sollten Sie es testen. Und Modelle sind der Hauptbestandteil Ihrer Geschäftslogik, daher würde ich behaupten, dass die meisten Komponententests/Spezifikationen für die Modelle gelten würden. – iain

+0

In der Tat. Um meinen Punkt zusammenzufassen: Wenn Ihre Sprachsyntax wie eine geschäftlich lesbare aussieht, warum dann Tests? –

+2

Zum Schutz vor Regressionen, wo zusätzlicher Code, den Sie schreiben, alte Funktionalität bricht. Es sei denn, Sie planen, Ihren Code jedes Mal neu zu lesen, wenn Sie eine Änderung vornehmen ... – Gareth

Verwandte Themen