java – JUnit – 应该为在setUp中实例化的tearDown中的资源分配null?

我正在读一本关于JUnit的书,作家建议在tearDown方法中清空资源.为什么?这不是GC的工作吗?可以严重伤害吗?

让我们想到这样的例子:

public class SomeTest extends TestCase {
  Vector vector;
  List<Object> list;  

  protected void setUp() {
    vector = new Vector();
    list = new ArrayList<Object>();
  }

  // messing with resources
  // adding,deleting,testing whatever

  protected void tearDown() {
    vector = null;
    list = null;
  }
}

你怎么看?那个代码在tearDown是否需要?

解决方法

是的,这确实是必要的.

您将看到,JUnit实际上会为每个测试方法创建Test类的单独实例,并且Junit3测试运行器(JUnit4不是这样)将保持这些实例,直到整个测试套件完成.

因此,如果您的(JUnit3)测试类具有占用大量内存的字段,则当您有大量的测试方法时,可以轻松地耗尽堆空间.当然,如果您的示例代码中的这些集合只包含少量短字符串,那并不重要.

相关文章

最近看了一下学习资料,感觉进制转换其实还是挺有意思的,尤...
/*HashSet 基本操作 * --set:元素是无序的,存入和取出顺序不...
/*list 基本操作 * * List a=new List(); * 增 * a.add(inde...
/* * 内部类 * */ 1 class OutClass{ 2 //定义外部类的成员变...
集合的操作Iterator、Collection、Set和HashSet关系Iterator...
接口中常量的修饰关键字:public,static,final(常量)函数...