Nach dem Diagramm ist Product eine dumme Datenklasse ohne zu testende Funktionalität. Also würde ich anfangen, Tests für (und die Implementierung im TDD-Stil) zuerst Line und dann Order zu schreiben, die Abhängigkeitsleiter hinauf. In der Regel ist es sinnvoll, die Klassen niedrigerer Stufen zu testen, bevor Sie mit der Arbeit an Klassen höherer Stufen beginnen (dh die von den Klassen niedrigerer Stufen abhängen). Dies macht das Fangen von Bugs effizienter.
Ob Sie Scheinobjekte verwenden müssen, hängt von den tatsächlichen Abhängigkeiten der getesteten Klasse ab. Wenn es sich um einfache Klassen handelt, die Sie einfach instanziieren und mit den für Ihre Tests erforderlichen Daten / Zuständen einrichten können, benötigen Sie keine Verspottungen. (Dies scheint für Ihr Beispieldesign hier der Fall zu sein.) Wenn jedoch eine der Abhängigkeiten schwierig zu initialisieren ist / umfangreiche Abhängigkeiten aufweist / unerwünschte Nebenwirkungen aufweist / von einer externen Ressource wie einer Datenbank abhängt, ist dies sinnvoll um stattdessen ein Scheinobjekt zu verwenden.
Ich sehe hier keinen großen Bedarf an Scheinobjekten. Wie bereits erwähnt, benötigen Sie diese meistens, wenn Abhängigkeiten schwer einzurichten sind.
Beispielsweise haben wir sie in Ruby on Rails-Projekten verwendet, als wir Controller getestet haben und eine Benutzeranmeldung benötigten, die einen Aufruf an einen anderen Controller und das Speichern eines Teils seiner Informationen in einem Cookie erfordert hätte. In diesem Fall ist es hilfreich, einen angemeldeten Benutzer zu verspotten, der true zurückgibt, wenn er nach einem bestimmten Zugriffsrecht gefragt wird.
quelle
Normalerweise möchten Sie zu Testzwecken das zu testende System / Objekt isolieren, damit Sie alles verspotten, was sich außerhalb davon befindet. Verwenden Sie also beim Testen eines Auftragsobjekts mithilfe Ihres Klassendiagramms einen Schein für das Linienobjekt. Verwenden Sie beim Testen von Line einen Schein für Bestellung und Produkt. Verwenden Sie beim Testen des Produkts den Schein für Line.
quelle
"TDD ist in erster Linie eine Designtechnik mit dem Nebeneffekt, dass Ihr Quellcode gründlich auf seine Einheit getestet wird" - Scott W. Ambler
Die Idee ist, das Design durch Schreiben von Komponententests zu finden. In Ihrem Fall scheint das Design bereits vorhanden zu sein, was den Zweck von TDD in gewisser Weise zunichte macht (vorausgesetzt, Ihr Design ist endgültig).
In Bezug auf das Verspotten. Wenn Sie verspotten möchten, empfehle ich Ihnen, das Produkt zu verspotten, wenn Sie Tests für Line schreiben, und Line zu verspotten, wenn Sie Order testen. Aber es kann hier übertrieben sein. Ich persönlich versuche, das Verspotten so weit wie möglich zu begrenzen und Abhängigkeiten von externen Klassen (z. B. Datenbankinstanzen) zu entkoppeln.
quelle