Frage

Zwei Fragen über Unit-Tests.

  1. Ich habe das Schreiben von Unit-Tests für jedoch eine Weile, sind sie in der Regel zu Testklassen hatte ich schon geschrieben. Vor kurzem las ich einen Artikel (Wohlgemerkt einen alten Artikel), das sagt Sie sollten Unit-Tests schreiben vor Sie Ihren Code beginnen zu schreiben.

    Hat jemand dies tatsächlich folgen Methodik? Es scheint wie eine gute Idee auf dem Papier, aber in der Praxis es?

  2. Should schreiben Sie Unit-Tests, um zu sehen, wie Ihre Methode Griffe schlecht / böswilliger Eingang? Offensichtlich würden Sie schreiben Tests gegen Funktionen wollen, die speziell gemeint sind Griff „user“ Eingang zu sehen, wie es behandelt schlecht / böswilligen Eingang, aber was Funktionen, die nie diese Art der Eingabe an sie übergeben haben sollten? An welchem ??Punkt ziehen Sie die Grenze?
War es hilfreich?

Lösung

Die Methodik Unit-Tests zu schreiben, bevor die Klassen aufgerufen Testgetriebene Entwicklung (TDD ) und wurde von Kent Beck in den frühen 2000er Jahren populär. Die Idee ist, dass Sie einen Test schreiben, der die Funktionalität beschreibt, die Sie benötigen. Zunächst wird dieser Test fehl. Wie Sie Ihre Klasse zu schreiben, ist der Test bestanden. Sie Refactoring Ihr Test mehr gewünschte Funktionalität hinzufügen, dann die Klasse Refactoring, um diesen neuen Testdurchlauf zu machen. Ihre Klasse hat ihre Ziele erreicht, sobald die Tests bestehen. Natürlich ist diese Waage bis über Klassen.

In Bezug auf welche Arten von Tests zu schreiben, es hängt davon ab, ob Sie eine öffentliche API oder eine private API testen. Öffentliche APIs sollten weitergehende Tests haben geschrieben, dass die Eingabe, um sicherzustellen, ist gut ausgebildet, vor allem, wenn Sie nicht vollständig den Benutzern Ihrer API vertrauen. Private APIs (Methoden, die nur von Code aufgerufen werden) können wohl ohne diese Tests weg -. Ich würde vermuten, dass Sie in einem schlechten Daten an sie weitergeben vertrauen können Ihr eigenes Entwicklungsteam nicht

Andere Tipps

Test-Driven Development ein ziemlich weit verbreitetes Konzept ist. Die Grundidee ist, dass Sie nur Code schreiben versuchen, die notwendig ist, eine Anforderung für die Software zu erfüllen. So schreiben Sie einen Test für die Anforderung, und dann den Code, um den Test zu bestehen zu machen.

Ich benutze persönlich nicht TDD, aber ich kenne Leute, die tun. Meine persönlichen Gedanken sind, dass es sehr nützlich ist, wenn Sie auf etwas arbeiten, die mehr anwendungsorientierte ist, wie eine Datenbank oder Benutzeroberfläche. Aber für etwas, das mehr Algorithmus lastig ist (wie ein Physik-Modell), finde ich, dass es mein Gedankengang bricht und in die Quere kommt.

Das Schreiben der Unit-Tests ersten ist eine ziemlich gängige Praxis. Ein großer Vorteil ist, dass Sie nicht nur Tests schreiben, dass der Code, sondern Tests bestanden werden, die definieren, was wichtig ist, was Sie erreichen wollen, und dem, was Sie machen wollen wird sicher nicht passieren. Es kann Ihnen Ihr Design Fleisch heraus helfen. Auch Sie können vet den Splitter mit externen Stakeholdern, bevor Sie Code.

Wie für das, was Tests zu schreiben, die ein bisschen subjektiv basierend auf der Zeit Sie haben. Ich würde nicht verrückt vetting Code für Szenarien gehen sie nie konfrontiert sein wird. Das heißt, es ist erstaunlich, was Eingabe es Code macht, dass „es wird nie sehen“. So sind mehr Tests besser, aber es gibt auf jeden Fall kehrt an einem gewissen Punkt zu verringern.

Die Sprache, die Sie in Sachen codieren. Dynamische Sprachen erfordern mehr Tests, da der Compiler weniger Probleme fangen und Fehler können schwieriger zu Spur (da sie weiter von der ursprünglichen Eingabe Ausgabe ausbreiten kann). Zumindest ist dies meiner Meinung nach.

Es macht auch einen Unterschied, wo der Eingang herkommt. Die Öffentlichkeit sollte positiv böswillige betrachtet werden (dh. Die Bahn), sollten die Mitarbeiter sein angenommener inkompetent und sogar Kerl Programmierer (und sich selbst!) Angenommen werden sollte, zumindest nachlässig sein. Aber die Gefahr fällt, wie Sie näher an Ihren inneren Kreis erhalten.

  

Hat jemand tatsächlich diese Methode folgen?

Ja.

  

Es scheint wie eine gute Idee, auf dem Papier, aber in der Praxis ist es?

Ja.

  

Should schreiben Sie Unit-Tests, um zu sehen, wie Ihre Methode Griffe schlecht / böswilliger Eingang?

Ja.

  

Was Funktionen, die nie diese Art der Eingabe an sie übergeben haben sollte? An welchem ??Punkt ziehen Sie die Grenze?

Wenn es sich bewegt von Software zu Psychose.

Sie können - wenn Sie wollen - Schreibtests für unmöglichen Situationen. Allerdings Sie Ihre Zeit und Ihr Arbeitgeber ist in nahe liegender Weise zu verschwenden.

Sie schreiben Tests für die definiert Anwendungsfälle. Und das ist es.

Sie haben nicht zufällig Testfälle bilden auf der Grundlage Ihrer Phantasie.

Was wenn? Was passiert, wenn die definiert sind Anwendungsfälle unvollständig? Bummer. Sie schreiben Tests für die offiziellen Vertrag, öffentlichen Schnittstelle - und nichts mehr

.

Was passiert, wenn das Design ist unzureichend, und Sie erkennen, dass die gegebene Schnittstelle mit unvollständigen Angaben, Widersprüchen und Sicherheits durchlöchert ist? Das hat nichts zu tun mit dem Testen. Dies ist nur zu programmieren. Bad-Design ist schlechtes Design.

Was passiert, wenn einige bösartige Soziopath nimmt Ihr Code und verwendet es in einer Weise, die (oder auf andere Weise nicht zu erfüllen) die definierten Spezifikationen überschreitet? Bummer. Der Soziopath gewinnt. Sie konnten Ihren Code in die unmögliche Situation bringen Sie nicht für nicht getestet. Kaufen sie ein Bier, weil sie so klug.

Es gibt einen Unterschied in Mentalität zwischen Test vor und Test nach. Schreiben von Tests, bevor eine Form von Design , indem Sie den Code für die Schnittstelle werden die Gestaltung und die erwartete Verhalten zu definieren. Wenn Sie dann Code schreiben, der die Tests besteht, dass Ihr Design validiert. Und am Ende der Entwicklung, passieren Sie eine Reihe von Tests haben bereits an Ort und Stelle!

Mit Test nach, müssen Sie vorsichtig sein, um die Falle zu vermeiden, Schreiben von Tests, dass Ihr vorhandener Code übergeben wird. Es ist ein anderer Fokus, und Sie haben nicht so viel aus ihn heraus als Test vor Version.

Es gibt bereits eine ziemlich gute Gruppe von Antworten, aber ich möchte ein mehr sagen, denken die Frage Nummer 2.

Wenn Sie Ihren Unittest-Code „data driven“ zu machen, soll es nicht egal, ob der Code testet „schlecht“ oder „gut“ Eingang. Worauf es ankommt, ist, dass Sie groß genug Datensatz, dass Abdeckungen beide haben.

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