I'd like to reduce the time which our build (using ant) takes for running the tests.
Currently I am using the default forkMode
, which forks a new vm on each test class (perTest
).
I am thinking about to switch to forkMode="once"
but I am unsure if this will couple the tests somehow and maybe give me false positive and/or false negatives results after running my tests.
Questions:
Will each test case get a new ClassLoader so that all static references from previous runs are not accessible/visible anymore?
Are there other things which lead to test dependency/coupling of test methods which may change the behavior (beside native library loading which I am not using)
- What about garbage collection/finalization, are they run after each test? (I don't rely on them, but I just want to get a complete picture)
UPDATE
According to the current answers it seems that junit is always sharing a single classloader between all test cases per vm/fork when using forkMode. (so forkMode="once" indeed means there's one classloader for all tests)
This has many advantages (faster tests and may cause tests to fail because of static coupling) but also some disadvantages (static coupling which will only work if a shared classloader is used -> false positive)