【问题标题】:Large amount of unit tests cause freezes with Failed Binder Transaction大量的单元测试导致 Failed Binder Transaction 冻结
【发布时间】:2010-08-26 15:51:31
【问题描述】:

我为我的 Android 应用程序编写了大约 400 个单元测试。如果我逐包运行测试,一切正常并且我的所有测试都通过了。但是,如果我尝试一次全部运行它们,最终(大约 360 次测试),Android 开始吐出!!! Failed Binder Transaction Errors !!!。在大约 10-20 个这些错误之后,我正在测试的应用程序的进程被终止,单元测试甚至从未完成。

我应该注意到,在这段时间内,Eclipse 在控制台中报告了Collecting test information。我认为这很奇怪,因为它表明它正在运行测试,即使 JUnit UI 没有反映这一点。当一切正常时,在Collecting test information 阶段我看到测试运行,JUnit UI 然后出现,然后所有测试再次运行(我通过阅读 logcat 知道这一点)。那是(我认为)一个单独的问题,但我觉得如果有人知道那是什么,我会提到它。

自 2011 年 6 月 6 日起编辑

根据 Christopher 在下面的回答,我已经验证这仅在尝试通过 Eclipse 运行时才会发生。如果我使用 ANT 运行我的测试套件,所有测试最终都会执行。

当我现在尝试运行我的测试套件时,Eclipse 基本上挂在“收集测试信息”上。我没有让它运行很长时间,但我会尽快尝试看看它是否完成。

【问题讨论】:

  • 我们在大约 500 次测试中看到了相同的情况。您是否设法缓解了这个问题?
  • 对不起,我还没有找到解决这个问题的方法。也许 Android 团队的某个人有一些想法......

标签: java android unit-testing junit


【解决方案1】:

我再次对此进行了调查,据我所知,这纯粹是 Android Eclipse 插件的问题。似乎已解决的问题,但有时仍会发生(可能与机器有关)。

正如您所提到的,Eclipse 插件似乎将所有测试运行了两次。它实际上第一次做的是收集测试套件和测试名称,以便它可以在漂亮的分层 JUnit UI 中显示所有测试名称。

但是,像这样“运行”测试似乎会导致问题。作为 Android SDK Tools v8 的一部分,a "workaround" was added 在检查每个测试之间设置了 15 毫秒的延迟。这样做是为了防止“大型测试套件的 Binder 事务失败......”。

确实,我回到了出现“FAILED BINDER TRANSACTION”错误的项目,我无法在命令行上重现它。我们也在 Eclipse 中进行了尝试,但它无法再被复制(尽管当我们最初看到这个时,我确信我们有 SDK Tools r8+)。

但是,我通常仍然可以在 Eclipse 中重现它。尝试使用最新的 Android 工具从 Eclipse 再次运行您的测试,或者尝试我创建的这个最小的 GitHub 存储库,看看您是否可以重现它:
https://github.com/orrc/android-large-test-failures#readme

【讨论】:

  • 我根据您的建议结果编辑了我的问题。我用 ANT 运行了我的测试套件(奇怪的是,我们最近才切换到 ANT),它成功了!我将尝试在 Eclipse 中再次运行我的测试项目,以查看 log cat 在“收集测试信息”时所说的内容。另外,为了清楚起见,我在设备和模拟器上都遇到了这个错误。
  • 好的。所以我的项目仍然肯定会在 eclipse 中抛出失败的 binder 事务,但是这一次,它是在尝试收集测试信息而不是第二次运行测试时..多么奇怪..
  • 为了进一步更新这项工作,我想我已经缩小了问题的范围。我很少会在 Nexus S 上出现此问题。但是,在处理器较慢的旧手机(在我的情况下是 HTC Aria)上,我可以定期重现该问题。我想那部手机的延迟还不够?
  • 感谢您的信息。到目前为止,我还没有在不同速度的手机上尝试过。无论如何,我刚刚提交了b.android.com/18660
  • 克里斯,因为这似乎不会被解决(我知道,我仍然会重新审视它!),我想我会接受你的回答。至少我们知道我们俩在这件事上并不疯狂和孤独。
【解决方案2】:

您可能想尝试在本地 JVM 中运行测试,而不是将它们部署到模拟器或手机上。查看 Robolectric 以获得一些帮助。

【讨论】:

  • 虽然这可能行得通,但我更感兴趣的是为什么它们不能在我的设备上运行。这对我来说很奇怪。
猜你喜欢
  • 2014-10-20
  • 2011-06-19
  • 1970-01-01
  • 2011-10-17
  • 2017-10-12
  • 2015-07-16
  • 1970-01-01
  • 1970-01-01
  • 2020-10-27
相关资源
最近更新 更多