# Unterschied zwischen Integrationstest und JUnit test?



## tanzverfuehrung (22. Jun 2012)

Während man beim Unit Testing einzelne Komponenten testet, werden beim Testen der
Integration mehrere integrierte Komponenten auf einmal getestet. Haben sich einzelne
Komponenten beim Unit Testing bewährt, so werden diese in das System integriert und
dann getestet.
(oder auch kurz: Unit-TestTest der einzelnen Methoden einer Klasse
IntegrationstestTest der Integration mehrerer Module)

ICh verstehe das schon, nun sind alle zusammen gewuerfelt  und ich soll sie trennen.wie genau erkenne ich dass das nun ein intergrationstest ist???
Wenn mehrere Klassen inizialisiert werden, kann ich dann von ausgehen das es ein intergrationstest ist???
Oder kann ich vom AUfbau sehen, das es ein Integrationstest ist!
Es waere ein Code BEispiel auch sehr schoen ...wo ich eventuell die unterschiede sehe!DANKE :rtfm:


----------



## ssoul26 (22. Jun 2012)

Wie meinst du das, dass alle zusammengewürfelt sind?


----------



## ssoul26 (22. Jun 2012)

Wenn die Klassen in deinem großen Test untereinander Kommunizieren bzw. Daten austauschen ist das ja Integrationstest. Bei Unit-Tests bleibst du generell nur in einer Klasse und beeinflusst die anderen Komponenten so gut wie gar nicht.


----------



## tanzverfuehrung (22. Jun 2012)

ssoul26 hat gesagt.:


> Wie meinst du das, dass alle zusammengewürfelt sind?



naja alle sind in * einem* package....ich soll sie jetzt trennen.
das einemal 
..*/src/test/ *   und ..*/src/integrationtest/* gibt.
Ich bin mir meisten nicht wirklich sicher, was es genau ist!:bahnhof:
Ich kann raten, aber das ist ja nicht der Sinn der sache
Also gibt es was, das ich das genau sehe?????:L


----------



## tanzverfuehrung (22. Jun 2012)

und kann ich von ausgehen, dass wenn mehrere assert - Abfragen in dem TEst stehen, es ein Integrationstest ist? NEin oder? Kann auch einfach sein, das der JUnit nicht besonders gut geschrieben ist, weil er nicht jedes Verhalten einzeln testet oder????:bahnhof:


----------



## tagedieb (22. Jun 2012)

Grundsätzlich sollte jede Klasse sein eigener Unit test haben. Werden 2 oder mehr Klassen getested kann dies schon als Integrationtest bezeichnet.

Abhängikeiten zu Andern Klassen können 'weggemockt' werden
 Siehe Mockito. So kann explizit eine einzelne Klasse getested werden und gilt als Unittest.


----------



## tanzverfuehrung (22. Jun 2012)

tagedieb hat gesagt.:


> Grundsätzlich sollte jede Klasse sein eigener Unit test haben. Werden 2 oder mehr Klassen getested kann dies schon als Integrationtest bezeichnet.
> 
> Abhängikeiten zu Andern Klassen können 'weggemockt' werden
> Siehe Mockito. So kann explizit eine einzelne Klasse getested werden und gilt als Unittest.



Was ist, wenn man eine Klasse_1 hat, die getestet werden woll und die methode die grad getestet wird, ein  Uebergabewert hat von einer anderen Klasse_2 und diese nicht gemockt wird, sondern richtig inizialisiert wird.Ist das dann schon ein Integrationstest?


Oder wenn es eine Hilfsmethode gibt, die andere Klassen_2 Objekte braucht, um die zu testende Klassen_1 zu testen???Dann ist es noch ein JUnit test oder~???


???:L



tagedieb hat gesagt.:


> Grundsätzlich sollte jede Klasse sein eigener Unit test haben. Werden 2 oder mehr Klassen getested kann dies schon als Integrationtest bezeichnet.



*Zwei oder mehre Klassen getestet, heisst ja dann nur wenn zwei Asser -Ausdruecke......gibt, mit zwei verschiedenen Klassen oder???
Das heisst auch wenn ich mehrere Klassen Objekte zum Testen brauche, heisst es nciht gleich , dass es ein Integrationstest ist? SOndern nur wenn mehr als eine Klasse im gleichen Test eine Assert -Abfrage hat! Ist das so richtig????*

???:L Oh gott, ich hoffe ihr versteht mich


----------



## tagedieb (22. Jun 2012)

Reine Java Beans müssen nicht getested werden, ansonsten wegmocken!

Soweit zur Theorie. Mehr lässt sich generell nicht sagen. Alles andere müsste man die Details kennen.


----------



## BigPun (4. Jul 2012)

Ist es nicht meistens so, dass wenn man in einer Test Klasse Mocks hat, es sich um einen JUnit test handelt? Da Mock ja nur so tut als würde man mit anderen Klassen kommunizieren....
-> Ohne Mocks wäre es dann ein Integrationstest, da man dann mit den echten Klassen kommuniziert und somit das ganze Kkomplette System testet...


----------



## maki (4. Jul 2012)

Ja BigPun,

Mocks sind ein Hinweis, aber keine Garantie für einen isolierten Unittest.


----------



## ARadauer (4. Jul 2012)

Ich denke hier kann man nicht 100%ig abgrenzen.
Was macht für mich den Unterschied in der Praxis? Das ganze drum herum, für einen Integrationstest brauche ich oft eine kleine H2 Testdatenbank und einen Spring Context um den Zusammenspiel quer durch die Schichten zu testen. Ein Unit Test sollte sehr isuliert ablaufen können. 

Ich würd einfach nochmal den fragen, der dir die Aufgabenstellung gegeben hat.


----------



## Gonzo17 (4. Jul 2012)

> Unterschied zwischen Integrationstest und JUnit test?



Kurz noch eine allgemeine Erklärung, weil das im Titel falsch rüberkommt.

Es gibt verschiedene Tests: Modultests (oder auch Unit-Tests), Integrationstests und Systemtests.

Modultests bzw. Unit-Tests testen eine möglichst kleine, in sich geschlossene Einheit. Dazu verwendet man als Java-Entwickler in der Regel JUnit. JUnit ist ein Framework, um Tests zu schreiben und auszuführen. Deswegen ist der Begriff "JUnit-Test" etwas irreführend.

Integrationstests testen mehrere Komponenten im Zusammenspiel. Auch das kann man mit JUnit machen, manchmal empfiehlt es sich aber das mit anderen Werkzeugen zu tun.

Systemtests testen dann das gesamte Produkt als Ganzes mit allen Komponenten. Das machst du dann nicht mehr mit JUnit, da kannst du zum Beispiel Tools benutzen, die eine Benutzereingabe simulieren oder man setzt tatsächlich irgendwelche Menschen dran.


----------



## maki (4. Jul 2012)

> Ich denke hier kann man nicht 100%ig abgrenzen.


Doch das kann man 

IMHO sollte man das auch, weil oft das Verständnis fehlt um Integrationstests und isolierte Unittests zu unterscheiden, aber isolierte Unittests sehr andere Eigenschaften haben als Integrationstests.

Letztere sind sehr fragil, testen meist Blackboxes, sehr viel Code und brauchen meist viel mehr + komplexere Testdaten und haben oft viele Abhängigkeiten, eine kleine Änderung im System kann viele Integrationstests zum versagen bringen, die Fehler aus den Integrationstest zeigen einem oft nicht genau wo der Fehler liegt usw.
Isolierte Unittests sind das komplette Gegenteil davon: sehr stabil, kaum Abhängigkeiten, testen Whiteboxes, einfache "Testdaten" bzw. Mocks und die Fehlermeldungen zeigen einem im Idealfall die Zeile im prod. Code die falsch ist (die sog. "defect localisation" wurde mal von Kent Beck als Hauptmerkmal von guten isolierten Unitests vorgeschlagen).

Für echtes TDD zB. taugen nur isolierte Unittests.


----------

