【问题标题】:OutOfMemoryError in test with jUnit [closed]使用 jUnit 进行测试时出现 OutOfMemoryError [关闭]
【发布时间】:2012-03-13 16:35:23
【问题描述】:

当我用 jUnit 测试我的程序时,我遇到了

的错误

java.lang.OutOfMemoryError

。如何管理用于测试的内存大小?

【问题讨论】:

  • 你是如何运行测试的?
  • 那是什么 IDE?请添加更多信息,否则人们将无法为您提供帮助
  • 在您的 IDE 中必须有用于测试运行的选项。写入JVM选项-Xmx1024m
  • @Bry6n:这篇文章中这样的评论到底有什么意义?我看到很多类似的问题,但是当人们问“我不知道该怎么做”时,他们没有必要尝试任何事情。
  • @Bry6n :我在我的程序中测试一个方法,当我更改表的参数时,我有 java.lang.OutOfMemoryError

标签: java junit


【解决方案1】:

如果您使用的是 Eclipse IDE;从顶部的菜单中单击运行并选择运行配置。将出现一个对话框。选择您正在运行的测试并单击参数选项卡。键入:-Xmx1024m 并单击应用。再次运行它,看看它是否抛出相同的异常。如果是这样,则被测方法可能会导致问题。当您在一个循环中进行递归调用时,就会发生这种情况。希望对您有所帮助。

【讨论】:

    【解决方案2】:

    造成这种情况的一个可能原因是在测试类的实例字段中保留了大量数据。

    您必须了解,JUnit 将为类中的每个测试方法创建一个新的测试类对象(以避免测试相互影响),并将保留对所有这些对象的引用。

    因此,测试类中的实例字段不应引用大量数据,或者,如果确实需要,则必须在拆卸方法中将它们设置为 null

    更新:上述问题显然只存在于旧版本的 JUnit 中。

    【讨论】:

    • 我想知道如何管理内存进行测试,因为我无法为测试文件制作 -Xmx1024m !我在 Netbeans 下
    • 不需要将字段清空。即使没有它,它们也会被垃圾收集。
    • @Esko Luontola:不,在整个测试套件完成之前,这些字段引用的对象不会被垃圾收集。如果您有一个包含 20 个测试方法的测试类和一个包含 10MB 字节数组的实例字段,那么您将需要 200+ MB 的堆内存,否则测试运行将因 OutOfMemoryError 而中止。
    • @Michael Borgwardt:错了。在测试方法执行后,这些对象就有资格进行垃圾回收。如果它以其他方式起作用,那将是愚蠢的。查看 JUnit 4.10 的代码 (org.junit.runners.BlockJUnit4ClassRunner#runChild) 表明它没有保留对象,实验pastebin.com/Hdt7vvYP(它为每个测试分配 100MB)也证明了这一点:使用-Xmx160M 它通过几次分配重试(因为惰性 GC)并使用 -Xmx310M 所有分配在第一次尝试时成功(jdk1.6.0_24 64bit Win7)。
    • @Esko Luontola:好的,你让我相信我不会那样工作,但我绝对肯定 JUnit 过去确实如此愚蠢地工作 - 然而这是几年前的事了在 JUnit 3 中
    猜你喜欢
    • 2013-02-10
    • 2014-01-04
    • 2016-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-24
    • 2011-10-04
    • 1970-01-01
    相关资源
    最近更新 更多