JUnit 4.x样式测试和测试套件与JUnit 3.x测试套件的处理方式不同。
简而言之,您 应该在JUnit3风格的测试中将字段设置为null, 但 在JUnit4风格的测试中 无需设置 。
对于JUnit3.x样式测试,
TestSuite包含对其他
Test对象(可能是
TestCase对象或其他
TestSuite对象)的引用。如果您创建一个包含许多测试的套件,那么将
TestCase在最外层套件的整个运行过程中对所有叶子对象进行硬引用。如果您的某些TestCase对象在
setUp()其中分配了占用大量内存的对象,并且对这些对象的引用存储在未设置为
nullin的字段中
tearDown(),则可能存在内存问题。
换句话说,对于JUnit
3.x样式测试,要运行的测试的规范引用了实际的
TestCase对象。
TestCase在测试运行期间,对象可访问的所有对象都将保留在内存中。
对于JUnit4.x样式测试,要运行的测试的规范使用Description对象。该
Description对象是一个值对象,它指定要运行的内容,而不是指定如何运行它。测试由
Runner接受
Description测试或套件的对象并确定如何执行测试的对象运行。甚至将测试状态通知给测试侦听器也使用这些
Description对象。
对于JUnit4测试用例默认亚军,JUnit4,保持对测试对象的引用只有大约为测试运行的持续时间。如果您使用自定义运行器(通过
@RunWith注释),则该运行器可能会或可能不会长时间保留对测试的引用。
也许您想知道如果在JUnit4样式套件中包含JUnit3样式的测试类会发生什么?JUnit4将调用
newTestSuite(Class),它将为
TestCase每个测试方法创建一个单独的实例。跑步者将
TestSuite在整个测试过程中保持对的引用。
简而言之,如果您正在编写JUnit4风格的测试,则不必担心将测试用例的字段设置为可拆卸
null(当然,可以释放资源)。如果您正在编写JUnit3样式的测试,
setUp()这些测试在中分配大对象并将这些对象存储在的字段中
TestCase,请考虑将字段设置为
null。



