Ich werde mein erstes echtes Projekt in Ruby on Rails starten und zwinge mich, TDD- Tests zu schreiben . Ich sehe keine wirklichen Vorteile beim Schreiben von Tests, aber da dies sehr wichtig erscheint, werde ich es versuchen.
Muss ich jeden Teil meiner Anwendung testen , auch statische Seiten?
Antworten:
Bei TDD geht es nicht um Tests, sondern um Design. Wenn Sie die Tests schreiben, müssen Sie darüber nachdenken, wie die Klasse funktionieren soll und welche Art von Schnittstelle Sie benötigen. Die Tests sind ein erfreulicher Nebeneffekt, der eine spätere Umgestaltung erleichtert.
Wie verhält sich also eine statische Seite und wie sieht die Benutzeroberfläche aus?
Meine erste Antwort wäre "keine" und "keine".
quelle
Es ist immer eine Kosten-Nutzen-Analyse. Was kostet es, dass das Feature für Sie kaputt geht? Wenn die Kosten hoch sind, dann testen Sie gut und gründlich. Wenn die Kosten niedrig sind, testen Sie leicht oder gar nicht.
Es sind auch die Kosten für die Markteinführung zu berücksichtigen. Vielleicht ist es besser für Sie, ein größtenteils funktionierendes Feature zu liefern, als zu spät ein vollständig funktionierendes Feature zu liefern.
Es ist fast unmöglich, diese Fragen in der allgemeinen IMO zu beantworten.
Ich denke, es ist wichtiger, die Fähigkeit zum Testen beizubehalten, wenn sich herausstellt, dass einige Funktionen wichtiger sind als Sie ursprünglich gedacht hatten.
quelle
Ich würde Ja sagen". Wenn Sie Tests haben, die selbst die einfachsten Funktionen und den einfachsten Code abdecken, können Sie sicher sein, dass das Hinzufügen von neuem Code nicht dazu führt, dass der vorhandene Code nicht mehr funktioniert. In ähnlicher Weise verhindert das Einspielen eines Tests für jeden Fehler, auf den Sie stoßen, dass sich Regressionen wieder einschleichen.
quelle
Ja, du solltest alles testen ...
Sie werden nicht unbedingt in der Lage sein, automatisierte Tests für alles zu schreiben. Verwenden Sie für Ihre statischen Seiten Selenium http://seleniumhq.org/, um sicherzustellen, dass die Dinge korrekt sind.
Aus meiner Erfahrung ist es so gut wie unmöglich, Testfälle für einige Front-End-Dinge zu schreiben, aber aus diesem Grund möchten Sie den Mark 1-Augapfel tatsächlich testen.
quelle
Testen ist so wichtig wie Codieren. Sie müssen das Sprichwort "Wenn etwas schief gehen kann, wird es" gehört haben. INMO: Unter den zahlreichen Techniken des Software-Engineerings, die zur Verbesserung der Qualität eingesetzt werden, ist das Testen die wertvollste Methode, um Probleme frühzeitig zu erkennen.
Das Testen ist zwar nicht alles möglich (insbesondere bei kleinen Teams und großen Systemen), bedeutet jedoch nicht, dass Sie das Testen insgesamt überspringen. Lohnt es sich zu testen? Siehe Abschnitt "Frühzeitig Fehler finden" in See Wiki-SoftwareTesting .
quelle
TDD-Tests können auch gelebte Spezifikationen sein, wenn sie so geschrieben sind. Die Namen der Testmethoden sollten für einen Geschäftsbenutzer sinnvoll sein.
quelle
Wie andere bereits erwähnt haben, ist das Testen in Ruby on Rails weitaus wichtiger als in (den meisten) anderen Sprachen. Dies ist auf das Fehlen eines Compilers zurückzuführen.
Sprachen wie Delphi , C ++, VB.NET usw. sind kompilierte Sprachen, und Ihr Compiler erkennt viele Fehler wie Tippfehler in Aufrufen einer Methode. In Ruby on Rails wissen Sie nur, ob in Ihrem Code ein Tippfehler oder ein Fehler vorliegt, wenn diese bestimmte Codezeile ausgeführt wird oder Sie eine IDE verwenden, die visuelle Warnungen anzeigt.
Da JEDE einzelne Codezeile wichtig ist (sonst wäre sie nicht vorhanden), sollten Sie jede Methode testen, die Sie schreiben. Dies ist viel einfacher, als es sich anhört, wenn Sie einige grundlegende TBDD-Tools befolgen.
Ich fand, dass Ryan Bates ' Rails Cast on, wie ich teste, für mich von unschätzbarem Wert war und die Einfachheit von TBDD wirklich hervorhob, wenn es richtig gemacht wurde.
quelle
Wenn Sie wirklich die TDD-Methodik verwenden, schreiben Sie keinen Code, ohne zuerst einen Unit-Test durchzuführen, den Sie bestehen möchten.
quelle
Ich würde sagen, nicht mit TDD zu beginnen. Treffen Sie eine fundierte Entscheidung, wenn Sie mehr Zeit mit dem Erlernen von Architekturstrategien im Allgemeinen verbracht haben. TDD lässt Sie diese Hausaufgaben nicht überspringen, obwohl Sie vielleicht glauben, dass dies der Fall ist.
Hier ist mein Problem damit. Wenn Sie sagen, es scheint eine Menge Zeit für Dinge zu verschwenden, die TDD niemals kaputt machen. Wenn Sie darauf hinweisen, dass es unmöglich ist, solche Dinge vorherzusagen, bevor Sie Ihre App schreiben, wird Ihnen gesagt, dass es mehr um Design geht und nicht um Testen, obwohl das Testen praktisch ist.
Aber sind riesige Ketten unvorhersehbarer Abhängigkeiten nicht das Produkt beschissenen Designs?
Also was ist es?
Hier ist ein Gedanke. Lassen Sie uns nicht erst riesige komplexe Abhängigkeitsketten haben, wenn Sie die folgenden zwei Prinzipien des objektorientierten Entwurfs aus Entwurfsmustern betrachten:
Das heißt, Ihren Objekten sollte es egal sein, wer den Aufruf ausführt oder wie sie erstellt wurden. Nur, dass die richtigen Argumente eingegeben wurden und dass die Methoden, die sie von anderen Objekten aufrufen, erwartungsgemäß funktionieren. Ihre Abhängigkeitskette sollte sich in den meisten Fällen an einem Verknüpfungspunkt befinden, dem Methodenaufruf des Aufrufers und der Stelle, an der die Argumente in Ihre Methoden eingefügt werden. Hier melden Sie sich an, validieren und senden nützliche Meldungen zum Debuggen, wenn die Dinge schief gehen.
Und:
Wer ist der Dummy? Der Typ, der einer Klasse in einem verworrenen, kaskadierenden Vererbungsschema etwas angetan hat, das etwa 30 Klassen umfasst, die zu einem Bruch der Randbedingungen führen, oder der Entwickler, der sich diese Architektur überhaupt ausgedacht hat? TDD könnte Ihnen helfen, Probleme in diesem schiefen Turm der Klasse Pisa früher zu lösen, als Sie es ohne hätten tun können, aber macht es das weniger schmerzhaft, wenn Sie das nächste Mal versuchen, einen der Endpunkte dieser Code-Katastrophe zu ändern?
Und hier komme ich zu dem, was mich nervt. Hilft TDD wirklich beim Entwerfen oder ermöglicht es eine schlechte Architektur? Es scheint mir, dass es Potenzial hat, eine sich selbst erfüllende Strategie zu sein. Je weniger Ihr Team für schlechte Architektur verantwortlich sein muss, desto hilfreicher scheinen diese detaillierten Testkomponenten zu werden, aber letztendlich wird Ihre App zu einem immer größeren PITA, mit dem es zu arbeiten gilt (vorausgesetzt, sie haben in der ersten Phase nicht viel über Architektur nachgedacht Ort). Und die Konsequenzen nicht zu erkennen, ist zweifellos der teuerste Fehler, den Sie machen können, wenn Sie an einer Anwendung arbeiten, die im Laufe der Zeit aktualisiert und geändert werden soll.
quelle
Um die Frage zu beantworten, überlegen Sie, was hier schief gehen könnte. Insbesondere, wenn Sie den "Code" (Markup / was auch immer) ändern, wie können Sie sicher sein, dass Sie die Seite nicht beschädigt haben. Nun, für eine statische Seite:
Persönlich würde ich empfehlen:
Der Vorteil ist, dass Sie etwas möchten, das wiederholbar und einfach zu verwenden ist und automatisch in Ihrem Testläufer ausgeführt wird.
quelle
Um all die bereits hervorragenden Antworten zu ergänzen, denke ich darüber nach, was zu testen ist und was nicht:
Testen Sie:
Testen Sie nicht:
Es macht also keinen Sinn, einen Test zu haben, der besagt:
und ein Code, der sagt
Und es macht auch keinen Sinn, Präsentationssachen zu testen, z. B. ob das Symbol perywinkle blau ist, welche Schriftart Sie für Überschriften verwendet haben usw.
Sie fragen also, "ob ich statische Seiten testen soll", und die Antwort lautet: Sie testen sie, sofern sie Teil der Funktionalität, Geschäftslogik oder des Verhaltens Ihrer Site sind.
Daher haben wir in unserer App einen Test, der prüft, ob die allgemeinen Geschäftsbedingungen in jedem Bereich der Website verfügbar sind - für anonyme Benutzer, für angemeldete Benutzer, über das Dashboard, in App-Bildschirmen usw. Es wird nur überprüft, ob sie verfügbar sind Ein Link namens "Allgemeine Geschäftsbedingungen" auf jeder Seite, über den der Link funktioniert, und der Test besagt, dass beim Eintreffen auf der Seite die allgemeinen Geschäftsbedingungen "angezeigt" werden - gerade genug, um sich zu vergewissern, dass es sich um die richtige Seite handelt. ohne "Konstante testen" oder "Präsentation testen" ... damit Sie überprüfen können, ob der Text z. B. korrekt ist, ohne die jeweilige Schriftgröße oder das Textlayout zu überprüfen ...
quelle