Robolectric java 堆大小错误

问题描述 投票:0回答:3

所以我正在使用 Robolectric 3.1.4 运行我的测试。在另一个项目中,我使用 robolectric 运行所有测试都没有问题,但现在我总是收到此错误:

java.lang.OutOfMemoryError:Java 堆空间

当我删除活动的一些视图时,问题就停止了......

好吧,我的问题是:如何增加项目中的堆大小,或者如何使 robolectric 消耗更少的内存?

如有任何帮助,我们将不胜感激!

java android unit-testing out-of-memory robolectric
3个回答
0
投票

当您在活动中显示太多图像时,通常会发生此类问题。可能使用一些 ViewPager?如果是这样的话,你可以阅读this,它解释了如何使用缓存来存储图像并减少内存消耗。

另一个解决方案是通过在 AndroidManifest.xml 上设置来增加堆大小:

android:largeHeap=”true”
..但请记住,这主要用于需要大量内存的应用程序,如游戏、视频处理器等


0
投票

答案应该是(至少对我来说):

在build.gradle(Project:xxx)中添加如下:

subprojects {
  tasks.withType(Test) {
    maxParallelForks = 2
    forkEvery = 80
    maxHeapSize = "2048m"
    minHeapSize = "1024m"
  }
}

参考:https://github.com/robolectric/robolectric/issues/5131


0
投票

就我而言,当我将

@Config(qualifiers = "w360dp-h640dp")
添加到测试类时,我开始收到错误。我想更改设备屏幕尺寸,因为一些测试失败了,因为显然 UI 不适合屏幕,因为 Robolectric 默认使用小屏幕尺寸。

我添加的注释与他们在他们的文档的示例中完全相同。添加注释后,我得到了与OP完全相同的错误。然后我尝试设置默认宽度和大小,所以

@Config(qualifiers = "w320dp-h470dp")
,效果很好,没有任何 OutOfMemory 错误。

然后我想,也许我应该保留屏幕分辨率的长宽比?所以我最终将屏幕尺寸设置为默认值的两倍

@Config(qualifiers = "w640dp-h940dp")
,并且我的测试成功了,没有出现内存不足错误!

我猜想很多不同的事情可能是导致错误的原因,但就我而言,这就是原因。

© www.soinside.com 2019 - 2024. All rights reserved.