JUnit - 我应该在tearUown中为在setUp中实例化的资源分配null吗?

Xor*_*rty 11 java junit

我正在阅读一本关于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;
  }
}
Run Code Online (Sandbox Code Playgroud)

你怎么看?tearDown中的代码是否必要?

Mic*_*rdt 9

是的,这确实是必要的.

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

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

  • JUnit4确实为每个测试方法创建了一个不同的对象,但是在整个测试套件完成之前它不会保留这些实例.请参阅我对http://stackoverflow.com/questions/3655944/is-it-really-necessary-to-nullify-objects-in-junit-teardown-methods的回复 (3认同)
  • JUnit 4也是如此. (2认同)