我应该在AfterClass(Java JUnit 4)中使静态变量无效吗?

use*_*896 3 variables null junit static

我创建了一些静态变量@BeforeClass.我应该将它们设置为null @AfterClass吗?这些是非IO相关对象.

例:

public class ClassTest{
   private static String staticText;   
   @BeforeClass
   public static void setUp(){
      staticText="long text";
   }
//test methods

//Is this necessary
@AfterClass
public static void tearDown(){
   staticText=null;
   }    
}
Run Code Online (Sandbox Code Playgroud)

Man*_*qui 8

简答:

对于静态成员:对于JUnit3和JUnit4,静态成员永远不能进行垃圾收集,除非您明确地使其引用无效(例如在@AfterClass方法中).

对于非静态成员:如果您正在使用JUnit3,那么最好在方法中使非静态成员变量无效@After.如果您将JUnit4与默认测试运行器一起使用,那么这种做法是不必要的.

答案很长:

JUnit为该类中存在的每个测试方法创建一个单独的测试类实例.JUnit3保留对所有这些实例的引用,直到测试套件完成执行,因此最好在方法中清理这些引用tearDown().(当然,由于在它所属的类的所有实例中只存在一个静态变量实例,因此对于非静态变量更为重要.)

JUnit4仍然具有为每个测试方法创建测试类的单独实例的行为,但只要您使用默认测试运行器,那么它只保留对当前正在执行的测试的测试类实例的引用属于.因此,即使您没有在方法中显式地使它们无效,也会清除非静态成员变量tearDown().

但要注意,如果您使用自定义JUnit4测试运行器(通过@RunWith注释),则无法保证对测试类实例的引用保留多长时间.