Ich möchte die Zeit reduzieren, die unser Build (mit Ant) für die Ausführung der Tests benötigt. Derzeit verwende ich die Standard forkMode
die forkt eine neue vm für jede Testklasse ( perTest
).
Ich denke über einen Wechsel zu forkMode="once"
aber ich bin unsicher, ob dies die Tests koppeln wird und mir nach der Durchführung meiner Tests vielleicht falsch positive und/oder falsch negative Ergebnisse liefern.
Fragen:
-
Bekommt jeder Testfall einen neuen ClassLoader so dass alle statischen Referenzen aus früheren Läufen nicht mehr zugänglich/sichtbar sind?
-
Gibt es andere Dinge die zu einer Testabhängigkeit/Kopplung von Testmethoden führen, die das Verhalten verändern können (abgesehen vom Laden nativer Bibliotheken, die ich nicht verwende)
-
Was ist mit Garbage Collection/Finalisierung, werden sie nach jedem Test ausgeführt? (Ich verlasse mich nicht auf sie, aber ich möchte einfach ein vollständiges Bild bekommen)
UPDATE
Nach den aktuellen Antworten scheint es, dass Junit bei der Verwendung von forkMode immer einen einzigen Classloader für alle Testfälle pro vm/fork verwendet. (forkMode="once" bedeutet also tatsächlich, dass es einen Classloader für alle Tests gibt)
Dies hat viele Vorteile (schnellere Tests und kann dazu führen, dass Tests aufgrund der statischen Kopplung fehlschlagen), aber auch einige Nachteile (statische Kopplung, die nur funktioniert, wenn ein gemeinsamer Classloader verwendet wird -> falsch positiv)