大量的单元测试会导致Finding Binder Transaction崩溃

时间:2010-08-26 15:51:31

标签: java android unit-testing junit

我为我的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基本上依赖于“收集测试信息”。我没有让它长时间运行,但我会尽快试一试,看看它是否能完成。

2 个答案:

答案 0 :(得分:3)

我再次对此进行了调查,据我所知,这纯粹是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

答案 1 :(得分:1)

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