Frage

Ich schaue gerade eine kräftige Rails -Testsuite. Es ist nichts, worüber ich in Einzelheiten eingehen kann, aber die Laufzeit für die gesamte Suite (Einheit/Funktion/einige Integration) kann über 5 Minuten dauern.

Wir sind völlig auf Armaturen angewiesen und verspotten uns nicht so sehr, wie wir sein sollten.

Unsere nächsten Sprints konzentrieren sich vollständig auf die Testsuite, verbessern sowohl die Berichterstattung, schreiben bessere Tests und schreiben effizientere Tests.

Abgesehen von mehr spöttischeren und stumpfem Inhalt in unseren Tests erwägen wir, unsere Vorrichtungen durch das wahrscheinlichste Werksmädchen zu ersetzen. Ich sehe viele glückliche Leute, die ähnliche Situationen machen, konnten aber keine gute Ressource für irgendwelche Minen für den Umzug in eine Fabrik finden. Ich habe einige langsamere Benchmarks gesehen, wenn ich Benchmarks aus verschiedenen Ressourcen verwendet habe, kann aber nicht definitiv finden, warum Fabriken gut sind, und deshalb möchten Sie sie möglicherweise nicht verwenden.

Kann mich jemand darüber erziehen, warum oder warum ich keine Fabriken verwenden sollte?

Vielen Dank!

War es hilfreich?

Lösung

Es kann einige Probleme bei der Einrichtung aller Abhängigkeiten zwischen Unternehmen für eine gute Testsuite geben. Wie auch immer, es ist immer noch viel einfacher als die Aufrechterhaltung einer Menge Spiele.

Vorrichtungen:

  • schwer zu Beziehungen aufrechtzuerhalten (insbesondere viele zu viel);
  • Die Testsuite -Laufzeit ist normalerweise langsamer, da mehr DB -Hits getroffen werden.
  • Tests sind sehr empfindlich gegenüber Änderungen des Schemas.

Fabriken:

  • Sie stützen alles, was Sie bei aktuellem Unit -Test nicht testen.
  • Sie bereiten Entitäten vor, die Sie mit Fabriken testen. Hier zeigen Fabriken ihren wirklichen Vorteil-es ist einfach, neue Testfälle einzurichten, da Sie dafür keine Tonne Yaml-Files beibehalten müssen.
  • Sie konzentrieren sich auf Tests. Wenn Tests das Szenario ändern müssen, verschieben Sie Ihre Denkweise nicht. Solange Stubs vernünftig sind und die Fabriken leicht angepasst werden können, sollte es Ihnen gut gehen.

Fabriken scheinen also ein guter Weg zu gehen. Die einzigen möglichen Nachteile, die ich sehe, sind:

  • Zeit, die Sie aus dem Vorrichtungen migriert haben;
  • Wenn Sie eine vernünftige Szenarien beibehalten, können Sie einige Anstrengungen erfordern.

Andere Tipps

Olegs Antwort ist großartig, aber lassen Sie mich die Perspektive von jemandem anbieten, der beides verwendet.

Die Vorrichtungen sind seit einiger Zeit der Peitschenjunge der Rails -Gemeinde. Jeder versteht die Nachteile von Vorrichtungen, aber niemand setzt sich wirklich für ihre Stärken ein. Nach meiner Erfahrung können Fabriken selbst leicht genauso schwer zu pflegen wie Armaturen (es hängt wirklich vom Schema ab, aber ich schweife ab). Die wirkliche Stärke der Fabriken ist der selektive Ersatz von Schmerzen auf der Basis von Geräten. Lassen Sie uns über ein paar Einzelheiten sprechen.

Das erste Problem ist die Leistung. Wenn Sie den größten Teil Ihrer App testen können, ohne die Datenbank zu treffen, sehen Sie eine erhebliche Geschwindigkeit, aber für die meisten Anwendungen denke ich nicht, dass es ratsam ist, zu testen, ohne die Datenbank vollständig zu treffen. Irgendwann möchten Sie den gesamten Stapel testen. Jedes Mal, wenn Sie sich verspotten oder Stub verspotten, nehmen Sie eine Annahme über eine Schnittstelle an, die subtile Fehler enthalten kann. Angenommen, Sie müssen die Datenbank für einen signifikanten Prozentsatz der Tests, Transaktionsvorrichtungen (Sie sind Die Verwendung von Transaktionsvorrichtungen kann gut viel schneller sein, als für jeden Test eine ganze Umgebung zu instanziieren.

Ich würde sagen, mit der Größe Ihrer Testsuite, auf die Sie wirklich schauen müssen Kontinuierliche Integration Um Ihre Entwicklung auf die nächste Ebene zu skalieren. Egal wie sehr Sie sie beschleunigen, es ist noch lange für Entwickler, zu warten. Vielleicht schauen Sie sich an Automatischer Test auch auf individueller Ebene helfen. Letztendlich wird CI Sie jedoch ermöglichen, die Testdisziplin aufrechtzuerhalten, ohne Entwickler Agilität zu beeinträchtigen.

Der Ort, an dem Feortures wirklich glänzen, befindet sich in Funktions-/Integrationstests. Ich sehe mir das an, dass die Vorrichtungen einen gesunden Basiszustand einrichten sollten, damit die App getestet werden soll. Die meisten Unit -Tests brauchen das nicht wirklich. Mit Fabriken können Sie eine sehr gute Abdeckung der Einheiten erhalten. Bei Funktionstests kann jedoch jede Seite Dutzende von Modellen treffen. Ich möchte nicht all das Zeug in jedem Test einrichten. Wenn ich immer komplexere Szenarien konstruiere, komme ich immer näher an der Nachbildung eines globalen Datennaseres, der ist exakt Welche Vorrichtungen waren überhaupt erst konzipiert.

Ein kontroverser Glaube, der ich der Meinung bin, ist, dass alles andere gleich ist, ich bevorzuge einen Funktionstest für 20 Unit -Tests (unter Verwendung von Rails Parlance). Wieso den? Da der Funktionstest beweist, dass das Endergebnis, das an den Benutzer gesendet wird, korrekt ist. Die Unit -Tests eignen sich hervorragend für die Nuancen der Funktionalität, aber am Ende des Tages könnten Sie immer noch einen Fehler entlang einer Schnittstelle haben, die Ihre gesamte Website bricht. Funktionstests geben mir das Vertrauen, das die Bereitstellung auf den Einsatz drückt, ohne die Seite in meinem Browser tatsächlich zu laden. Ich weiß, dass ich alles ausstechen und beide Schnittstellen testen und die gleiche Abdeckung erhalten kann, aber wenn ich den gesamten Stapel auf Kosten einer kleinen CPU in einem einfachen Test testen kann, würde ich das lieber lieber tun.

Was sind meine Best Practices für Vorrichtungen?

  • Richten Sie eine Handvoll für jedes Modell ein, um die breitesten Datenkategorien abzudecken
  • Wenn Sie eine wichtige neue Funktion hinzufügen, die viele Modelle und Controller übertrifft, fügen Sie einige neue Vorrichtungen hinzu, um die Hauptzustände darzustellen
  • Vermeiden Sie es, alte Vorrichtungen zu bearbeiten, mit Ausnahme des Hinzufügens/Entfernens von Feldern
  • Verwenden Sie Fabriken für kleinere/lokalere Variationen
  • Verwenden Sie Fabriken zum Testen von Pagination oder einer anderen Massenerstellung, die nur für einige Tests benötigt wird

Lassen Sie mich auch empfehlen Jay Fields 'Blog Für wirklich gute pragmatische Testberatung. Das, was mir an Jays Blog am meisten gefällt, ist, dass er immer anerkennt, dass Tests sehr projektspezifisch sind und was für ein Projekt funktioniert, nicht unbedingt für ein anderes funktioniert. Er hat das Dogma und lange auf Pragmatismus.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top