static - 在 Eclipse 和 Maven2 中运行测试时,JUnit 4 PermGen 大小溢出

标签 static junit mockito powermock permgen

我正在用 JUnit、PowerMock 和 Mockito 做一些单元测试。我有很多用 @RunWith(PowerMockRunner.class) 注释的测试类和 @PrepareForTest(SomeClassesNames)模拟 final类和 200 多个测试用例。

最近,当我在 Eclipse 或 Maven2 中运行我的整个测试套件时,我遇到了 PermGen 空间溢出的问题。当我一个一个地运行我的测试时,他们每个人都成功了。

我对此进行了一些研究,但是没有任何建议对我有帮助(我增加了 PermGenSize 和 MaxPermSize)。最近我发现有一个类只包含静态方法,每个方法都返回用 PowerMockito 模拟的对象。我想知道这是否是一个好习惯,也许这是问题的根源,因为静态变量在单元测试之间共享?

一般来说,拥有一个包含许多返回静态模拟对象的静态方法的静态类是一种好习惯吗?

最佳答案

我也从 Eclipse 中的 Junit 收到 PermGen 错误。但我没有使用任何模拟库,如 Mockito 或 EasyMock。但是,我的代码库很大,而且我的 Junit 测试使用的是 Spring-Test(并且是密集而复杂的测试用例)。为此,我需要真正增加所有 Junit 测试的 PermGen。

Eclipse 将 Installed JRE 设置应用于 Junit 运行,而不是 eclipse.ini 设置。所以要改变那些:

  • Window > Preferences > Java > Installed JRE's
  • 选择默认的 JRE,编辑...按钮
  • 添加到默认 VM 参数:-XX:MaxPermSize=196m

  • 此设置将允许 Junit 测试在 Eclipse 中运行更密集的 TestCases,并避免 OutOfMemoryError: PermGen。这也应该是低风险的,因为大多数简单的 Junit 测试不会分配所有的内存。

    关于static - 在 Eclipse 和 Maven2 中运行测试时,JUnit 4 PermGen 大小溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11683196/

    相关文章:

    android - 我可以有一个多进程全局变量吗?

    java - 使用可注入(inject)单例

    java - 模拟 org.apache.log4j.Level 类时出现 MissingMethodInvocationException

    java - 如何在java中的静态方法中获取调用者类的实例?

    ios - 仅更改 UITableView 中一个部分的页脚大小

    junit - 安卓 JUnit : Define a different Application subclass

    java - Selenium 2 WebDriver NoClassDefFoundErrorS

    unit-testing - Mockito 内部结构

    java - 如何在 Mockito 中编写 if-else 测试用例

    C++ 模板类型检查编译时线程安全吗?