相关疑难解决方法(0)

ActivityScenario<MainActivity> 挂起执行(click())

一般来说,我来这里是因为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())挂了,但是......

android android-activity android-espresso

4
推荐指数
1
解决办法
634
查看次数