当前位置: 首页 > 面试题库 >

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

翟宾实
2023-03-14
问题内容

我正在阅读一本有关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)测试类具有占用大量内存的字段,那么当您拥有大量测试方法时,很容易耗尽堆空间。当然,如果示例代码中的这些集合仅包含少数短字符串,那就没关系了。



 类似资料:
  • 问题内容: 我相信大家都知道setUp(@Before)将在任何测试方法之前执行,而tearDown(@After)将在测试方法之后执行。 我们也知道Junit会为 每个测试方法 创建一个Test实例。 我的问题是,我们可以只将setUp方法的内容移至类Constructor并删除setUp方法吗?是否有任何特定理由保留setUp方法? 问题答案: 这篇(旧的)JUnit最佳实践文章将其描述如下:

  • 写测试的时候你经常需要在运行测试前做一些准备工作,和在运行测试后进行一些整理工作。 Jest 提供辅助函数来处理这个问题。 为多次测试重复设置 如果你有一些要为多次测试重复设置的工作,你可以使用 beforeEach 和 afterEach。 例如,我们考虑一些与城市信息数据库进行交互的测试。 你必须在每个测试之前调用方法 initializeCityDatabase() ,同时必须在每个测试后,

  • 我正在编写一个Java Selenium测试自动化框架。我正在使用页面对象模型。我有一个基页,它包含可以被扩展基页的所有其他页使用的元素和方法。 到目前为止,我还没有实例化基页。我实例化了所有其他页面,如下所示: 我没有实例化BasePage,因为我认为所有的BasePage元素都是由扩展它的其他页面实例化的。 然而,今天我想用一个常用的方法,我放在了主页上。该方法希望使用一个也在BasePage

  • 我使用Spring Tools来开发我的网站。在这个网站上,管理员可以上传图像和其他文件,如PDF和CSV,客户可以稍后下载。 使用Spring工具时,我将目标文件夹设置为static/images/以上载新图像,这非常有效。但是在我的Linux服务器上部署了这个jar之后,Spring boot找不到静态文件夹,所以我使用了我发现的这个函数:如何动态获取Spring boot应用程序jar父文件

  • 问题内容: 这两种方法有什么优势吗? 范例1: 范例2: 问题答案: 没有区别-实例变量初始化实际上是由编译器放入构造函数中的。 第一种变体更具可读性。 你不能使用第一个变体进行异常处理。 另外还有初始化块,编译器也将其放在构造函数中: 但是,字段声明不是任何方法的一部分,因此它们不能像语句那样执行。相反,Java编译器会自动生成实例字段初始化代码,并将其放入该类的一个或多个构造函数中。初始化代码

  • 问题内容: 当我使用MSTest Framework并复制Selenium IDE为我生成的代码时,MSTest无法识别和。有什么替代方法? 问题答案: 您将分别使用和。