Phl*_*lip 4 android android-activity android-espresso
一般来说,我来这里是因为ActivityTestRule<>不推荐使用久经考验的,显然我需要使用ActivityScenario<>or ActivityScenarioRule<>。
但是他们打破了“对视图的测试应该像对待对象一样对待视图对象”的规则。例如,我必须“有效地”将所有断言填充到回调中。我无法开始ActivityScenarioRule<>工作,因为无法填充我的数据库并延迟对onCreate().
所以这给我留下了ActivityScenario<>,我可以做到这一点:
// stuff database
ActivityScenario<MainActivity> scenario = ActivityScenario.launch(MainActivity.class);
scenario.onActivity( (ma) -> {
// assertions on ma that pass
onView(withId(R.id.configure_device_button)).perform(click());
// ...
} );
Run Code Online (Sandbox Code Playgroud)
问题是perform(click())挂断,在wait().
我们还在等什么?
当我将视图对象视为对象时,ma.configureDeviceButton.performClick()有效。所以这意味着我现在必须重新编写数百个视图测试中的每一个......
事实证明,我可以ma像这样共享我的 MainActivity 句柄:
activateActivity( (ma) -> {
TestFixtures.ma = ma;
} );
Run Code Online (Sandbox Code Playgroud)
MainActivity 的寿命比它的回调更长。(如果我们不使用 Execute Around 模式,那么为什么要使用回调呢?)
所以我可能不需要重新设计所有东西。每个人仍然需要一个答案,为什么我的书perform(click())挂了,但是......
小智 5
onActivity 动作块在 UIThread 上执行,onView 将等待 UIThread 空闲。
您需要在 onActivity 块之外调用 onView 否则它会死锁。从你的代码
scenario.onActivity( (ma) -> {
// Do your UI setup
});
onView(...).perform(...);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
634 次 |
| 最近记录: |