Android 上的 Espresso 2,在未能启动被测 activity 而之前测试的活动仍然存在时,中间测试失败

Espresso 2 on Android, intermediately tests fail after failing to start the activity under test while activities from previous tests are still alive

我正在使用 Espresso 2 测试我的 Android 应用程序。中间我看到测试随机失败并显示此 Espresso 失败消息:

失败:testLongPressXXXXX (com.company.xxx.tests.testSuite.Test) ----- 开始异常 ----- android.support.test.espresso.NoMatchingViewException:在层次结构中找不到匹配的视图:ID:com.company.xxx:id/xxx_view_id 查看层次结构: +>DecorView{id=-1, visibility=VISIBLE, width=729, height=319, has-focus=false, has-focusable=false, has-window-focus=true, is-clickable=false , is-enabled=true, is-focused=false, is-focusable=false, is-layout-requested=false, is-selected=false, root-is-layout-requested=false, has-input-connection=false , x=0.0, y=0.0, child-count=1} ...

每次测试开始时,Espresso 工具都会打印出上一次测试中仍然存在的活动数量:

MonitoringInstrumentation:仍在 CREATED 到 STOPPED 中的活动:(数量)

每当我看到失败的测试时,我总是看到活动活动的数量不是 0,这让我相信这就是这个问题的原因,即使大多数时候在测试之前有活动活动测试仍然成功通过。

发生这种情况时,设备只会显示主屏幕大约 10 秒,然后就会失败。这当然只发生在我一次 运行 多个测试时。

我的问题是为什么在测试之间会有实时活动,有没有办法让 Instrumentation 等到上一个测试的活动完成后再进行下一个测试。

如果有人对测试中途失败的原因有不同的看法,那也会有所帮助。

不久前有人问过这个问题,但由于这似乎仍然相关,所以我想我应该分享我的发现。我面临类似的问题 - 具有唯一 ID 的视图出现 AmbiguousViewMatcherException,不同的测试随机失败 - 可能是由于活动未被销毁。

这似乎是一个已知问题,应在下一个版本中解决(参见此处:https://github.com/google/android-testing-support-library/issues/16)。显然 onDestroy() 和 isFinishing() 在每次测试后都没有可靠地调用,所以你可能不会每次都得到一个新的 Activity 甚至最终两个 Activity 相互重叠。

在他们修复它之前,我决定不把时间浪费在解决方法上,而是开始使用 Genymotion 模拟器解决了我的问题 - 可能是因为它们 运行 比 [=18] 中的内置模拟器快=] Studio(按照建议 here)。