Unittest - Objekte simulieren

White_Fox

Top Contributor
Mahlzeit

Ich muß jetzt jede Menge Tests schreiben für Klassen schreiben, die die Daten meines Programms bearbeiten. Und für diese Tests muß ich die Daten logischerweise erst erzeugen. Das ist relativ viel Arbeit - ein ernsthafter Grund, sich mal mit einigen Testwerkzeugen zu befassen.

Ich habe hier Mockito und JUnit, aber ein Problem: Ich hab keine Ahnung wie mir Mockito das Leben leichter machen kann und aus den Tutorials, die ich bisher gelesen habe, werde ich nicht schlau.

Beispiel: Ich hab eine Klasse, diese enthält u.a. eine ArrayList mit lauter Objekten, die z.B. einen Namen haben. Ein Testling soll jetzt von einem bestimmten Objekt den Namen ändern.
Hat irgendjemand eine Idee, wie ich Mockito jetzt diese Objekte nachahmen lassen kann, vielleicht auch ein paar kurze Hinweise wie Mockito das macht?
 

thecain

Top Contributor
Da sehe ich jetzt keinen Sinn drin Mockito zu verwenden. Du kannst die Liste ja einfach selber initialisieren.

für Mockito sehe ich zum Beispiel dann einen Einsatzzweck, wenn meine Klasse eine Abhängigkeit auf einen komplexeren Service hat, welcher eine List zurückgibt.

Beispielhaft:
Java:
List<Foo> myList = new ArrayList<>();
myList.add(new Foo());
MyService service = mock(MyService.class);
when(service.getList()).thenReturn(myList);
 

White_Fox

Top Contributor
Nun, ich wollte das Beispiel etwas einfacher halten-in dem, was ich nachher machen will, ist für die Testvorbereitung schon etwas mehr zu tun als nur eine Liste vorzubefüllen.
Die Klasse, auf der sich die Testlinge austoben sollen, hat mehrere verschiedene Instanzvariablen wenigstens drei verschiedener Klassen, diese haben ihrerseits Instanzvariablen verschiedener Klassen...so geht das bis etwa vier Ebenen runter.

Wenn ich dein Beispiel aber richtig verstehe, dann muß ich mich sowieso darum kümmern wie myList aussehen soll und z.B. die ganze Initialisierung von Foo durchlaufen. Oder Foo ebenfalls von Mockito nachäffen lassen...?
 

thecain

Top Contributor
Du willst ja auch noch etwas testen. Mockito initialisiert dir keine Daten, sondern bietet lediglich die Möglichkeit das "Gerüst" einer Klasse zu haben und einzelne Methoden zu ersetzen.

Wenn du also eine Referenz auf einen Service hat, der einen Webservice aufruft hast, kannst du diese Methode mocken. Wenn du alles mockst, testest du am Ende nur noch das Mocking-Framework.

Wo möglich würde ich immer auf die tatsächlichen Klassen zurückgreifen. Meiner Meinung nach ist Mockito dann wirklich sinnvoll, wenn das gar nicht geht.
 

AndiE

Top Contributor
Beim Testen hast du mehrere Möglichkeiten. Das erste ist der Dummy. Einfach eine ziemlich leere Klasse, die genau festgelegte Daten zurückgibt. In deinem Fall würde so ein Dummy einen Konstruktior haben, der jedoch nichts macht und bei "GetAll()", eine vorgefertigte Liste zurückgeben. Was du nicht zum Testen brauchst, brauchst du auch nicht zu implementieren. Du müsstest ja wissen, wie deine Daten aussehen, wenn du sie in den Klassen implementiert hast. Du kannst da einen einfachen Datenbaum aufbauen ohne Datenbankzugriff oder anderes. Prinzipiell ist es ja sowieso so, dass du die Daten in mehreren Tests benutzt, oder die Bereitstellung der Daten auch veränderst, um zu testen.
 

mrBrown

Super-Moderator
Mitarbeiter
Es gibt ein paar Libs, die Daten generieren können, zB https://github.com/j-easy/easy-random oder https://github.com/Devskiller/jfairy.

Besser ist's aber, davor immer noch mal nachzudenken, wie man das mit besserem Design anders lösen könnte. Wenn vier "Ebenen" relevant sind, ist das u.U. ein Zeichen für schlechte Kapselung, und etwas anders umgesetzt bräuchte man nur eine Ebene (kommt natürlich immer auf den Einzelfall an).

Wenn man außerdem Libs nutzt, die Daten mit Zufall generieren, verliert man u.U. Reproduzierbarkeit, dass kann manchmal zu einem Problem werden.
Oftmals bietet sich da als Alternative Builder-/Factory-Pattern an, durchaus auch extra für Tests passend umgesetzt, damit lassen sich passende Daten auch recht flott erzeugen.

Daten generieren würde ich persönlich nur noch in Ausnahmefällen, z.B. wenn man mal eine Liste von 100 Usern mit XY braucht.
 

White_Fox

Top Contributor
Hm...ich hab vorhin entdeckt daß ich schonmal Methoden geschrieben habe, um Testobjekte zu generieren. Ich denke, ich werde es dann erstmal dabei belassen.

Danke für die Anregungen/Hinweise/Inspirationen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Wie mache ich einen UnitTest? Allgemeine Java-Themen 16
schegga_B javax.crypto - Cipher Objekte - Sevice Provider matching? Allgemeine Java-Themen 1
berserkerdq2 Weiß jemand wie ich im Scenebuilder das Fenster so darstellen kann, dass beim Vollbildmodus die Objekte so angezeigt werden? Allgemeine Java-Themen 1
A Einzelne Objekte und Unterobjekte einer ArrayList ausgeben Allgemeine Java-Themen 53
B Java Reflection Probleme beim wehcselseitigen Referenzieren zweier Klassen/Objekte Allgemeine Java-Themen 14
N einem Array Objekte hinzufügen die ihr Array position gespeichert haben Allgemeine Java-Themen 34
E Objekte in einen String packen und wieder laden Allgemeine Java-Themen 5
L Objekte in Set nicht gefunden Allgemeine Java-Themen 13
Avalon Data Transfer Objekte aus Datenbank erstellen Allgemeine Java-Themen 8
G Objekte mit Strings Aufrufen Allgemeine Java-Themen 8
H Objekte speichern und laden Allgemeine Java-Themen 10
H Objekte speichern und laden Allgemeine Java-Themen 1
MiMa Referenz auf Objekte und deren Inhalte Allgemeine Java-Themen 12
W Objekte reproduzieren Allgemeine Java-Themen 2
W Objekte per Reflexion instanziieren Allgemeine Java-Themen 7
T OOP Objekte mit Erweiterung Initialisieren Allgemeine Java-Themen 6
O Erste Schritte Objekte als Datenelemente Allgemeine Java-Themen 14
J Equals Mock Objekte Allgemeine Java-Themen 5
J Mockito - Objekte miteinander vergleichen (equals) Allgemeine Java-Themen 6
N Bei Mouse Events nicht mehrere Objekte erstellen Allgemeine Java-Themen 13
J Zugriff auf erstellte Objekte einer Klasse von einer Klasse ausserhalb Allgemeine Java-Themen 3
J Java Objekte = null, Garbagecollector Allgemeine Java-Themen 12
F Listen - Mehrere Objekte Allgemeine Java-Themen 1
J Verständnis Frage zur Instanz, Objekte, Instanzierung, Referenz Allgemeine Java-Themen 14
F Objekte erzeugen Allgemeine Java-Themen 1
E Threads ThreadPoolExecutor remove mit callable Objekte Allgemeine Java-Themen 3
P mehrer Verschiedene Objekte in einer Klasse erstellen. Allgemeine Java-Themen 4
E OOP Objekte und Methoden Allgemeine Java-Themen 1
@SupressWarnings() Umgebungsvariable Objekte "gekoppelt" Allgemeine Java-Themen 6
S Algorithmus um Objekte auf einer Flaeche mit gleichem Abstand anzuordnen..? Allgemeine Java-Themen 20
C Objekte in Array List speichern? Allgemeine Java-Themen 1
OnDemand Objekte speichern Allgemeine Java-Themen 8
B Objekte anhand von Properties file Allgemeine Java-Themen 41
U Tiefe Objekte schreiben Allgemeine Java-Themen 1
R Abstrakte Basisklasse und instanzierte Objekte der abgeleiteten Klasse als Basisklasse übergeben Allgemeine Java-Themen 2
E 3D Objekte in 2D Bild finden Allgemeine Java-Themen 5
J Daten aus GUI auslesen und in Objekte umwandeln Allgemeine Java-Themen 6
F FileOutput/Input Objekte Allgemeine Java-Themen 6
OnDemand Objekte serialisieren Allgemeine Java-Themen 3
J unterschiedliche Objekte, selbe getter und setter Allgemeine Java-Themen 15
L Lib gesucht: Java-Objekte mit JSON Allgemeine Java-Themen 2
U Set erklären dass objekte gleich sind Allgemeine Java-Themen 12
E Best Practice Verdammt große Objekte Allgemeine Java-Themen 10
B Mehrere Objekte verschlüsselt serialisieren Allgemeine Java-Themen 6
G Liste anzahl der gleichen Objekte Allgemeine Java-Themen 6
N Objekte an eine andere Applikation übergeben Allgemeine Java-Themen 3
N 2 Objekte zu einer Gruppe zusammenfügen Allgemeine Java-Themen 7
M Instanzierte Objekte in XML Dokument speichern Allgemeine Java-Themen 3
B Verschiedene Objekte in Abhängigkeit eines Typs instanziieren. Allgemeine Java-Themen 17
K Input/Output Im Programm instanzierte Objekte Speichern und laden Allgemeine Java-Themen 3
S OOP Objekte als Return-Werte: Einen Klon zurückgeben oder Instanz auf das Feld? Allgemeine Java-Themen 10
H Objekte Serialisiert speichern Allgemeine Java-Themen 10
L MouseListener für viele Objekte erstellen Allgemeine Java-Themen 16
5 Objekte Sortieren lassen Allgemeine Java-Themen 7
N Objekte aus Array Inhalt erzeugen Allgemeine Java-Themen 8
L Input/Output Textdatei in Objekte überführen? Allgemeine Java-Themen 4
R Input/Output Objekte speichern ohne überschreiben Allgemeine Java-Themen 7
A Collections HashMap.containsKey findet keine immutablen Objekte Allgemeine Java-Themen 3
H Threads Thread stirbt aber Objekte in ihm leben weiter?! Allgemeine Java-Themen 9
M Java Objekte in XML mit JAXB Allgemeine Java-Themen 9
C Strings und JSON Objekte so klein wie möglich im Speicher ablegen Allgemeine Java-Themen 5
H COM-Objekte/ AktiveX Objekte Allgemeine Java-Themen 4
C Script für Website mit Objekte Ausblenden Allgemeine Java-Themen 3
M Txt einlesen & Objekte erzeugen Allgemeine Java-Themen 2
X Objekte aus TableModel serialisieren und deserialisieren Allgemeine Java-Themen 4
T ObjectInputStream - Arrayliste, die unbekannte Objekte enthält Allgemeine Java-Themen 9
B class dateien "einlesen" und objekte erzeugen Allgemeine Java-Themen 6
D Grafische Objekte zeichnen Allgemeine Java-Themen 4
A Wie zur Laufzeit auf Objekte zugreifen Allgemeine Java-Themen 7
F Referenzen auf Objekte Allgemeine Java-Themen 5
H Eclipse und Objekte Allgemeine Java-Themen 6
S Objekte die Objekte enthalten: Keine Vererbung Allgemeine Java-Themen 4
E Objekte in einer Liste suchen. Allgemeine Java-Themen 4
I Über eine Liste iterieren und Objekte löschen. Wie löst man das sauber? Allgemeine Java-Themen 5
I Pattern zum Erweitern existierender Objekte Allgemeine Java-Themen 4
N Dynamische Objekte / DB Allgemeine Java-Themen 5
J Objekte binär speichern Allgemeine Java-Themen 10
TiME-SPLiNTER Unbekannte Anzahl serialisierter Objekte lesen Allgemeine Java-Themen 2
V Objekte in Kategorien einteilen. Allgemeine Java-Themen 6
M 3D Objekte mit einer Linie Verbinden Allgemeine Java-Themen 3
F Wie zur Laufzeit ganz neue Objekte erzeugen? Allgemeine Java-Themen 5
A Dummy-Objekte für Webgui erzeugen Allgemeine Java-Themen 12
W Objekte speichern mit JFileChooser Allgemeine Java-Themen 8
D befehl auf mehrere objekte anwenden Allgemeine Java-Themen 7
L Objekte in Liste packen Allgemeine Java-Themen 2
S XML in Objekte wandeln. Euer Rat? Allgemeine Java-Themen 12
G Objekte serialisieren Allgemeine Java-Themen 2
L Parameter-Objekte verändern oder nicht? Allgemeine Java-Themen 6
D Objekte nur unter bestimmten Voraussetzungen erzeugen Allgemeine Java-Themen 4
S Objekte mit Arrays Allgemeine Java-Themen 9
F Objekte oder besser ID in Listen speichern? Allgemeine Java-Themen 2
S erzeugte objekte zählen Allgemeine Java-Themen 3
U auf Objekte mit variablem Namen zugreifen Allgemeine Java-Themen 4
Airwolf89 dynamischer Zugriff auf Variablen/ Objekte Allgemeine Java-Themen 4
Landei Objekte ohne Konstruktoraufruf erzeugen Allgemeine Java-Themen 7
E tiefe Kopie nicht serialisierbarer Objekte Allgemeine Java-Themen 3
J Speicherbedarf und persistente Objekte Allgemeine Java-Themen 4
J ArrayList Objekte anhand Propertywerte filtern Allgemeine Java-Themen 3
R Moeglichst viele Datumsstrings in Date Objekte konvertieren? Allgemeine Java-Themen 3
J Eindeutige ID für Objekte als Keys in TreeMap Allgemeine Java-Themen 12

Ähnliche Java Themen

Neue Themen


Oben