JUnit 4: Wie man die eigene Liste testen kann [TDD]

J

JustNobody

Top Contributor
Ist es demnach einigermaßen wichtig mit den "richtigen" Tests zu beginnen?

Ich kann mir ja aussuchen, ob ich mit einer Klasse beginne, die viele Abhängigkeiten zu anderen Klassen hat oder mit einer Klasse, von der andere abhängen.

Also auch hier sehe ich erst einmal kein TDD Thema. Wenn Du die (oo) Analyse abgeschlossen hast und das (oo) Design gemacht hast, dann wirst Du Dir die Arbeit ja strukturieren. In Agilen Teams läuft es oft darauf hinaus, dass Du Arbeitspakete (Oft Tasks oder so genannt) definierst. Und diese werden oft auch mit Abhängigkeiten versehen:
Das Arbeitspaket, welches irgendwas mit "Kunden" macht, hat eine Abhängigkeit zu dem Arbeitspaket, dass die Entity "Kunde" erstellen soll.

Somit ist dies aus meiner Sicht nicht eine Frage vom TDD sondern von der Arbeitsorganisation. Wie organisiere ich meine Arbeit, damit ich alle Arbeiten ordentlich abschließen kann.

Baue ich erst das Dach (Super, wenn ich das am Boden baue und später anhebe ... Alleine das Arbeiter nicht herunter fallen können ist doch super!) oder fange ich doch etwas anders an und hebe z.B. erst einmal den Keller aus um den dann zu erstellen? Das ist doch unabhängig von den Arbeitsweisen, die die Qualität sicher stellen soll, also z.B. beim Mauern ein Lot verwenden, damit die Mauer gerade ist.
 
mihe7

mihe7

Top Contributor
TDD beschreibt nur eine Technik, wie ich testbaren und getesteten Code schreiben kann und diesen Status beibehalten kann. Das Thema Design habe ich da eigentlich nie wirklich enthalten gesehen.
Hängen testbarer Code und gutes Design nicht zusammen? Evtl. lässt sich TDD (auch) als Schritt in einem "iterativen Micro-Design" sehen, weil es testbaren Code forciert. Das heißt natürlich nicht, dass TDD Voraussetzung für gutes Design wäre.
 
W

White_Fox

Top Contributor
Einen Test zu schreiben ist doch eigentlich immer eine tolle Möglichkeit, sein Problem mal "auszuprobieren".

Bisher mache ich das immer so, daß ich mir für mein Problem eine Lösung ausdenke, meist ein paar Klassen dazu benötige, diese Klassen schreibe und diesen ein paar Methoden mitgebe (ohne Implementierung, in den Methoden steht dann nur eine Zeile throws UnsupportedOperationException();, dann die Javadocs für die Methoden schreibe, eine Test generiere und implementiere und am Ende werden die Methoden der Klassen implementiert.

Dabei passiert es halt öfter mal, daß ich irgendwann merke daß ich in eine Sackgasse renne und die Schnittstelle umbaue...und damit auch den Test.

Ich werde demnächst mal Folgendes ausprobieren: Im Test erstmal mein Problem nachbauen inkl. der Lösung, die ich mir vorstelle. Sozusagen den Test mißbrauchen, um das Design zu erstellen. Und dann die Implementierung vornehmen.
Mal schauen was dabei herauskommt...
 
H

httpdigest

Top Contributor
Hängen testbarer Code und gutes Design nicht zusammen? Evtl. lässt sich TDD (auch) als Schritt in einem "iterativen Micro-Design" sehen, weil es testbaren Code forciert. Das heißt natürlich nicht, dass TDD Voraussetzung für gutes Design wäre.
Sehe ich hier genauso. Wenn Tests am Anfang definiert werden, dann lenkt das das Design des zu testenden Codes eher in Richtung "wenige Abhängigkeiten", "wenige bzw. eine Verantwortlichkeit", "geringe Komplexität", ...), da das eben auch das Testen einfacher macht.
Wenn man ohne Tests anfängt, ein (Micro-)design zu entwerfen, kommt man schnell zum Punkt, dass Klassen/Methoden überladen werden, viele Verantwortlichkeiten abbilden und viele Abhängigkeiten bekommen. Das sorgt im Zweifel erst beim späteren Schreiben von Tests dazu, dass das Schreiben der Tests eben "keinen Spass macht", weil das Design von vornherein vielen Prinzipien objektorientierter Programmierung (insbesondere S.O.L.I.D.) widersprochen hat und somit auch nicht gut zu testen, nicht gut zu warten und nicht gut zu verstehen ist.
 
J

JustNobody

Top Contributor
Hängen testbarer Code und gutes Design nicht zusammen? Evtl. lässt sich TDD (auch) als Schritt in einem "iterativen Micro-Design" sehen, weil es testbaren Code forciert. Das heißt natürlich nicht, dass TDD Voraussetzung für gutes Design wäre.
Also gewisse Dinge gehören etwas zusammen. Und auch die Ausführungen von @httpdigest sind durchaus korrekt. Aber dennoch sehe ich Design Entscheidungen von TDD abgekoppelt. Diese werden dann bei TDD explizit umgesetzt (wenn alle Tests erfolgreich sind), aber ich sehe es als einen eigenständigen Prozess an. Design muss man sich überlegen und das, ehe man anfängt, ersten Code zu schreiben. Was für Klassen willst Du denn schreiben, wenn Du Dir das noch nicht überlegt hast? Und der Punkt beim TDD ist eher:
"Die Unit Tests laufen - nun überdenk Dein Design. Gibt es Handlungsbedarf?"

Ein Design muss so aufgebaut sein, dass es dann auch Testbar ist. Ich will halt ein gutes Design haben und da gehört das mit rein. Und wenn ich (mehr oder weniger) nach TDD vorgehe, dann komme ich zu dem Punkt, dass ich etwas entwickle, das Testbar sein muss und ggf. überdenke ich das Design noch einmal. Aber wie gesagt: Irgendwie sehe ich da zwei Dinge, die zwar zusammen gehören, aber dennoch zwei Paar Schuhe sind.

SOLID und Co hat ja mit TDD nicht viel zu tun. TDD will natürlich - wie eigentlich alle Ansätze - hin zu Clean Code und beeinflusst das. Aber das sind dennoch zwei Paar Schuhe.

Aber vielleicht kann ich mich auch nicht ganz klar ausdrücken oder habe irgendwas falsch im Kopf. Ich möchte nicht einmal ausschließen, dass ggf. Begriffe von mir leicht verfälscht verwendet werden und ich unter Design im Detail etwas Anderes verstehe als ihr. Nicht, dass es hier zu Wortklauberei kommt. Ich denke, wir sind nicht einmal weit auseinander mit den Sichtweisen...
 
mrBrown

mrBrown

Super-Moderator
Mitarbeiter
Also gewisse Dinge gehören etwas zusammen. Und auch die Ausführungen von @httpdigest sind durchaus korrekt. Aber dennoch sehe ich Design Entscheidungen von TDD abgekoppelt. Diese werden dann bei TDD explizit umgesetzt (wenn alle Tests erfolgreich sind), aber ich sehe es als einen eigenständigen Prozess an. Design muss man sich überlegen und das, ehe man anfängt, ersten Code zu schreiben. Was für Klassen willst Du denn schreiben, wenn Du Dir das noch nicht überlegt hast? Und der Punkt beim TDD ist eher:
TDD ist durchaus auch als Design-Tool gedacht, wenn man bereits alle nötigen Klassen vorher im Detail geplant hat, verbaut man sich damit relativ viel.

Was man natürlich haben sollte, ist ein Verständnis der Domäne – dabei fallen aber mindesten keine Methoden und auch keine Infrastruktur- und Applikation-Klassen bei raus. Am besten ist es wirklich, nur mit User-Storys & Domänenwissen zu starten, und alles weitere "entstehen zu lassen"

Hast du das Buch von Kent Beck mal gelesen? Auch ganz unabhängig von TDD ist das zu empfehle, grad die vielen Tipps sind relativ allgemein verwendbar ("Kauf dir einen vernünftigen Stuhl") :)
Das "Money"-Beispiel daraus ist ganz interessant, das startet wirklich bei Null – einziges "Vorwissen" ist das ungefähre Ziel, was möglich sein soll (würde man zB als User-Story formulieren), gestartet wird dann mit einem "2 mal 5 Dollar sind 10 Dollar", und am Ende fallen dann mehrere Klassen bei raus, keine von denen wurde vorher irgendwie eingeführt oder erwähnt, entstanden sind die rein durch Refactoring und Tests.
 
J

JustNobody

Top Contributor
Das Buch habe ich zumindest teilweise gelesen. Ich muss es wohl noch einmal hervor holen und durchgehen...

Habe jetzt auf jeden Fall erst einmal mitgenommen, dass ich die Thematik noch einmal vertiefen muss da ich ggf noch Lücken habe. Und schaden kann es bestimmt nicht ... war halt in den letzen Jahren etwas viel (durfte wieder C++ vertiefen, das hatte ich 2003 oder so zuletzt gemacht und da gab es doch einiges Neues und man vergisst manches auch bzw. hat es nichtmetrischer ganz so parat).

Danke auf jeden Fall für euren Input / eure Geduld.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Fehler bei JUnit Test Java Basics - Anfänger-Themen 5
W JUnit Tests Java Basics - Anfänger-Themen 4
hello_autumn Klassen Anzahl sowie die Anzahl der Junit Tests ermitteln? Java Basics - Anfänger-Themen 8
B JUnit / Exceptions/ try-catch Java Basics - Anfänger-Themen 6
L JUnit tests in java Java Basics - Anfänger-Themen 5
N JUnit und private Methoden testen. Java Basics - Anfänger-Themen 9
F JUnit - Was ist mit "side effects" gemeint ? Java Basics - Anfänger-Themen 2
H JUnit in Eclipse: java.lang.NoClassDefFoundError: Java Basics - Anfänger-Themen 9
B JUnit Test erstellen Java Basics - Anfänger-Themen 6
W Problem bei JUnit Test Aufgabe Java Basics - Anfänger-Themen 15
L Junit Testing bei XML? Java Basics - Anfänger-Themen 3
J LocalDateTime testen mit Junit Java Basics - Anfänger-Themen 20
W JUnit Test und HashCode Java Basics - Anfänger-Themen 14
A Objekt in Methode zurückgeben, JUnit zeigt Error Java Basics - Anfänger-Themen 2
A Kfz - Händler Klasse. JUnit-Test gibt noch Fehler an, aber finde Ursache nicht Java Basics - Anfänger-Themen 7
O JUnit - Objektreferenzen Java Basics - Anfänger-Themen 3
G Testen mit JUnit Java Basics - Anfänger-Themen 4
B Palindrom Test mit Junit Java Basics - Anfänger-Themen 23
C JUnit Tests. How to Java Basics - Anfänger-Themen 5
S Junit Test Java Basics - Anfänger-Themen 2
shiroX Klassen Klasse/Methode private final jUnit-Fehler Java Basics - Anfänger-Themen 5
L Junit Tests Java Basics - Anfänger-Themen 10
A IllegalArgumentException in JUnit testen Java Basics - Anfänger-Themen 3
V ToString-Methode mit JUnit testen(BlueJ) Java Basics - Anfänger-Themen 10
shiroX Methoden JUnit-Test einer void-Methode Java Basics - Anfänger-Themen 4
V JUnit Klassen Java Basics - Anfänger-Themen 3
T Junit Mockito: Instanz von inneren erzeugten Objekten Java Basics - Anfänger-Themen 4
S JUnit - Swing- Anwendung wird nicht neu gestartet Java Basics - Anfänger-Themen 0
B Binäre Suche - Junit Test Java Basics - Anfänger-Themen 6
S Kommt es zu Seiteneffekten wenn man waehrend den laufenden JUnit Tests den Code aendert? Java Basics - Anfänger-Themen 2
M JUnit Testmethoden mit mehreren assert Methoden Java Basics - Anfänger-Themen 1
S Double und Gleitkommazahlen mit JUnit testen Java Basics - Anfänger-Themen 7
K JUnit: Objekte von eigenen Klassen vergleichen...geht nicht Java Basics - Anfänger-Themen 5
Z JUnit Exception Java Basics - Anfänger-Themen 2
M Verständnisfrage zu JUnit Tests und private Methoden Java Basics - Anfänger-Themen 3
M Ist die Hamcrest Bibliothek auch schon in Junit 4.11 verfügbar? Java Basics - Anfänger-Themen 1
S Unterschied .jar Datei ausführen und junit Testfall... Java Basics - Anfänger-Themen 3
M Reihenfolge von Testmethoden in JUnit beeinflussen Java Basics - Anfänger-Themen 2
S Separate Funktion für JUnit-Test Java Basics - Anfänger-Themen 3
G JUnit-Tests im Programmdurchlauf starten Java Basics - Anfänger-Themen 4
T Best Practice JUnit: Wie Klassen durch Stubs/Mockups ersetzen Java Basics - Anfänger-Themen 7
T JUnit test failed Java Basics - Anfänger-Themen 3
M Junit Tests durchführen, die eine Verbindung zu einer Daten erfordern Java Basics - Anfänger-Themen 3
T Junit in Eclipse Java Basics - Anfänger-Themen 1
P JUnit bedeutungen Java Basics - Anfänger-Themen 3
R JUnit Test mit einer Dateistruktur als Testparameter Java Basics - Anfänger-Themen 3
shiroX OOP Array kleinste Zahl mit jUnit test Java Basics - Anfänger-Themen 3
S JUnit assertEquals funktioniert nichgt wie es sollte :( Java Basics - Anfänger-Themen 7
V Frage zu JUnit Tests Java Basics - Anfänger-Themen 3
B JUnit für JFileChooser Java Basics - Anfänger-Themen 6
S Code stimmt nicht für vorgegebenen JUnit-Test Java Basics - Anfänger-Themen 2
S File vergleich - Junit Java Basics - Anfänger-Themen 6
T JUnit Java Basics - Anfänger-Themen 18
G Junit Java Basics - Anfänger-Themen 4
X JUnit testing Java Basics - Anfänger-Themen 7
T JUnit Suite frage Java Basics - Anfänger-Themen 6
R JUnit Test mit mehrfach ausgeführt Java Basics - Anfänger-Themen 6
S InvocationTargetException bei JUnit Testlauf Java Basics - Anfänger-Themen 2
B JUnit - Mini-Test Java Basics - Anfänger-Themen 9
T Unterschied zwischen Integrationstest und JUnit test? Java Basics - Anfänger-Themen 12
Y Junit Test - Testwert ändert sich Java Basics - Anfänger-Themen 12
T Junit --Exception testen Java Basics - Anfänger-Themen 15
A JUnit Tests in Jar-Archiv packen Java Basics - Anfänger-Themen 2
G Erste Schritte JUNIT Regressionstests automatisieren Java Basics - Anfänger-Themen 2
M JUnit - nur einzelne Methode testen? Java Basics - Anfänger-Themen 4
M JUnit - nur Failures loggen? Java Basics - Anfänger-Themen 2
S Hilfe zu Java-Programm und JUnit Test!! Java Basics - Anfänger-Themen 5
T JUNit Test IOException Java Basics - Anfänger-Themen 5
R String Replace für JUnit Java Basics - Anfänger-Themen 19
T JUNIT Nullpointerexception Java Basics - Anfänger-Themen 3
M JUNIT tests mit ant script ausführen Java Basics - Anfänger-Themen 4
S [JUnit] eigener Testsuite Runner + Ausgabe Java Basics - Anfänger-Themen 6
S [JUnit] Print Results while running Java Basics - Anfänger-Themen 6
W Mit jUnit Array testen? Java Basics - Anfänger-Themen 5
T Junit Tests Java Basics - Anfänger-Themen 7
I JUnit Datapoints für mehrere Testklassen Java Basics - Anfänger-Themen 4
Spin JUNIT Test Case - Problem bei testen Java Basics - Anfänger-Themen 2
T brauche HILFE beim Junit test:eek: Java Basics - Anfänger-Themen 11
M Junit tests gehen nicht Java Basics - Anfänger-Themen 2
E OOP einfache Array Aufgabe mit jUnit Java Basics - Anfänger-Themen 5
L JUNIT Testing Java Basics - Anfänger-Themen 3
C jUnit: Erfahren, ob der getestete Code eine Exception gehandelt hat Java Basics - Anfänger-Themen 3
timbeau JUnit Test Dauer speichern/loggen Java Basics - Anfänger-Themen 16
turmaline JUnit testen ob keine Exception auftritt Java Basics - Anfänger-Themen 23
D JUnit auf Matrix anwenden Java Basics - Anfänger-Themen 5
W JUnit 4.X und Parameter Java Basics - Anfänger-Themen 4
xehpuk In JUnit über eigenen Thread testen Java Basics - Anfänger-Themen 3
P JUnit - Optimierung der Testklassen Java Basics - Anfänger-Themen 13
S JUnit: Konsole aktualisiert sich nicht Java Basics - Anfänger-Themen 3
G JUnit ist das neue main() Java Basics - Anfänger-Themen 16
A junit test wann verwendet man "was"? Java Basics - Anfänger-Themen 4
J JUnit Test Java Basics - Anfänger-Themen 2
H JUnit Customizing Java Basics - Anfänger-Themen 5
S JUnit Java Basics - Anfänger-Themen 6
M Junit TestCase für Random() Zahlen Java Basics - Anfänger-Themen 6
R Junit - assertEquals Java Basics - Anfänger-Themen 4
N Junit-hilfe !!! Java Basics - Anfänger-Themen 4
F Gleiche JUnit-Tests automatisert mit verschiedenen Methoden ausführen Java Basics - Anfänger-Themen 6
Houly JUnit Test Suite anlegen Java Basics - Anfänger-Themen 6
B OOP Testen - JUnit Java Basics - Anfänger-Themen 30

Ähnliche Java Themen

Anzeige

Neue Themen


Oben