Vorbereiten Unit-Tests: Was ist wichtig im Auge zu behalten, wenn sie auf einer Software-Architektur zu arbeiten? [geschlossen]

StackOverflow https://stackoverflow.com/questions/2151726

  •  23-09-2019
  •  | 
  •  

Frage

Lassen Sie uns sagen, ich bin ein neues Projekt beginnen, ist die Qualität oberste Priorität.

ich tut umfangreiche Unit-Tests zu planen, was wichtig ist im Auge zu behalten, wenn ich auf der Architektur gerade arbeite zu erleichtern und empower weiter Unit-Tests?

Bearbeiten : ich einen Artikel gelesen einige Male vor (ich kann es jetzt nicht mehr finden) reden, wie Verhaltensweisen Instanziierung Codes von Klassen der Entkopplung hilfreich sein könnte, wenn Unit-Tests. Das ist die Art von Design-Tipps Ich suche hier.

War es hilfreich?

Lösung

Einfache Tests kommt durch so viele zu ersetzen in der Lage, von dem Sie Ihre Methode Abhängigkeiten mit Testcode hat (Mocks, Fakes, etc.) Den gegenwärtig empfohlene Weg, dies durch die Abhängigkeit Inversion zu tun ist, auch bekannt als das Hollywood-Prinzip: „Don ‚t rufen Sie uns an, wir rufen Sie an.“ Mit anderen Worten: Ihr Code sollte „bitten um Dinge, schauen Sie nicht für die Dinge.“

Sobald Sie anfangen, auf diese Weise denken Sie Code kann leicht Abhängigkeiten auf viele Dinge finden müssen. Nicht nur, dass Sie Abhängigkeiten von anderen Objekten, aber Datenbanken, Dateien, Umgebungsvariablen, OS APIs, Globals, Singletons, etc. Durch die zu einer guten Architektur haften, Sie die meisten dieser Abhängigkeiten minimieren, indem sie über die entsprechenden Schichten bereitgestellt wird. Also, wenn es Zeit zum Test kommt, brauchen Sie nicht eine funktionierende Datenbank voll von Testdaten, können Sie einfach das Datenobjekt mit einem Scheindatenobjekt ersetzen.

Dies bedeutet auch, Sie müssen sorgfältig sortieren Sie Ihren Objektbau von Ihrer Objektausführung. Die „neue“ Anweisung in einem Konstruktor platziert erzeugt eine Abhängigkeit, die sehr schwer ist, mit einem Test Mock zu ersetzen. Es ist besser, diese Abhängigkeiten in über Konstruktor Argumente zu übergeben.

Beachten Sie außerdem, das Gesetz des Demeter im Auge behalten. Graben nicht mehr als eine Schicht tief in ein Objekt, oder erstellen Sie versteckte Abhängigkeiten. Der Aufruf Flintstones.Wilma.addChild (Kiesel); Mittel, was Sie eine Abhängigkeit von „Familie Feuerstein“ dachte, war wirklich eine Abhängigkeit von sowohl „Familie Feuerstein“ und „Wilma“ ist.

Andere Tipps

Stellen Sie sicher, dass Ihr Code testbar ist durch hochkohäsiv machen, niedrig entkoppelt. Und stellen Sie sicher wissen, wie man Werkzeuge spöttisch verwenden, um die Abhängigkeiten beim Unit-Tests zu verspotten.

Ich empfehle Ihnen vertraut zu machen mit dem SOLID Prinzip , so dass Sie kann eine überprüfbare Code schreiben.

Sie möchten vielleicht auch diese beiden SO Fragen prüfen:

Einige zufällige Gedanken:

  • Definieren Sie Ihre Schnittstellen: entkoppeln die Funktionsmodule voneinander, und entscheiden, wie sie miteinander kommunizieren. Die Schnittstelle ist der „Vertrag“ zwischen den Entwicklern aus verschiedenen Modulen. Wenn dann Ihre Tests an den Schnittstellen arbeiten, sind Sie sicher, dass die Teams jeweils Module als Black Boxes des anderen zu behandeln, und daher unabhängig arbeiten.

  • Erstellen und Testen zumindest die Grundfunktionalität des UI zuerst. Wenn Sie Ihr Projekt kann „reden“ Sie, es kann Ihnen sagen, was funktioniert und was nicht ... aber nur wenn es liegt nicht an dir. (Bonus:. Wenn Ihre Entwickler keine andere Wahl haben, aber die Benutzeroberfläche zu verwenden, werden Sie schnell etwaige Mängel identifizieren in der Einfachheit der Nutzung, Arbeitsabläufe, etc )

  • Test auf der niedrigsten praktischen Ebene. desto sicherer sind Sie, dass die kleinen Stücke der Arbeit, desto leichter wird es, sich in ein Arbeits ganzen kombinieren zu

  • Schreiben mindestens einen Test für jede Funktion auf der Grundlage der Spezifikationen, bevor Sie beginnen Codierung. Denn die Funktionen sind der Grund, Ihre Kunden Ihr Produkt kaufen. Seien Sie sicher, es ist entworfen, um zu tun, was es tun soll!

  • Do nicht erfüllt werden, wenn es das tut, was es tun soll; sicherzustellen, dass es nicht tun, was es nicht tun soll! es Feed-schlechte Daten, verwenden Sie es in eine unlogische Art und Weise, trennen Sie das Netzwerkkabel bei der Datenübertragung , führen sie es neben widersprüchlichen Anwendungen. Ihre Kunden werden.

Viel Glück!

Ihre Tests werden immer nur so gut wie Ihre Anforderungen sein. Sie können Anforderungen sein, dass Sie mit vorne auf einmal kommen, können sie Anforderungen sein, dass Sie kommen mit einer nach dem anderen, wie Sie Funktionen hinzufügen, oder sie können Anforderungen sein, dass Sie kommen mit, nachdem Sie es versenden und die Menschen beginnen ein Boot Belastung von Bugs berichten, aber Sie können einen guten Test, wenn niemand kann nicht schreiben oder dokumentieren genau das, was die Sache tun soll.

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