When loading all unit tests in a package, the make task throws a java.lang.OutOfMemoryError: Java heap space error.
If I run all the tests in each subpackage, though, all tests load and complete just fine. It is only when I try to run all tests in the parent package that the OOM error occurs.
I don't think this problem should be solved by tweaking VM parameters. I tried increasing the maximum heap and perm size, and it didn't solve the problem.
This leads me to believe there is some problem garbage collecting between loading tests in different packages, or that there is some too-eager class loading going on.
Is there a JUnit setting that could take care of these issues, or is the problem going to have to be solved by changing or adding code in the test cases?
解决方案
You must set all fields of the test classes to null in tearDown().
The reason is that JUnit instantiates one instance of the test class per test. It keeps that instance around for the whole time to save the results of the test (success, failure, stack trace). So if you use fields, they will stay and you'll run out of memory.