大量的unit testing会导致Finding Binder Transaction崩溃

我已经为我的Android应用程序编写了大约400个unit testing。 如果我按包运行测试包,一切正常,我的所有测试都通过。 但是,如果我尝试同时运行它们,最终(大约360次测试),Android开始吐出!!! Failed Binder Transaction Errors !!! !!! Failed Binder Transaction Errors !!! 。 在大约10-20个这些错误之后,我正在测试的应用程序的进程被杀死,unit testing甚至都没有完成。

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

编辑截至2011年6月6日

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

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

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

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

但是,“运行”这样的测试似乎会导致问题。 作为Android SDK Tools v8的一部分, 添加了一个“解决方法”,在检查每个测试之间会有15ms的延迟。 这样做是为了防止“Binder事务失败……适用于大型测试套件”。

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

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

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