为什么活动没有在带有espresso的Android Instrumentation测试(活动测试)中启动



我的测试类:

@RunWith(AndroidJUnit4.class)
public class MainActivityTest {

@Rule
public ActivityScenarioRule<MainActivity> rule = new  ActivityScenarioRule<>(MainActivity.class);
ActivityScenario<MainActivity> scenario;

Context context = ApplicationProvider.getApplicationContext();

@Before
public void launchActivity() {
scenario = ActivityScenario.launch(MainActivity.class);
scenario.moveToState(Lifecycle.State.CREATED);
}

@Test
public void sendLocationButton_clicked_activateLongClickToastAppear() {
onView(withId(R.id.location_button)).perform(click());
onView(withText("Long press it")).inRoot(withDecorView(not(is(getActivity(context).getWindow().getDecorView())))).check(matches(isDisplayed()));
}


@After
public void tearDown() throws Exception {
scenario.close();
}
}

错误:

java.lang.AssertionError: Activity never becomes requested state "[DESTROYED, RESUMED, CREATED, STARTED]" (last lifecycle transition = "PRE_ON_CREATE")
at androidx.test.core.app.ActivityScenario.waitForActivityToBecomeAnyOf(ActivityScenario.java:338)
at androidx.test.core.app.ActivityScenario.launchInternal(ActivityScenario.java:272)
at androidx.test.core.app.ActivityScenario.launch(ActivityScenario.java:195)
at androidx.test.ext.junit.rules.ActivityScenarioRule.lambda$new$0$ActivityScenarioRule(ActivityScenarioRule.java:70)
at androidx.test.ext.junit.rules.ActivityScenarioRule$$Lambda$0.get(Unknown Source:2)
at androidx.test.ext.junit.rules.ActivityScenarioRule.before(ActivityScenarioRule.java:103)
at org.junit.rules.ExternalResource$1.evaluate(ExternalResource.java:46)
at org.junit.rules.RunRules.evaluate(RunRules.java:20)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)

这只是错误的一部分,因为堆栈溢出拒绝了如此庞大的代码。

我只是想测试一下Toast是否出现在按钮点击上。不知道发生了什么。请帮忙。提前谢谢。

这可能是我最近遇到的同一个问题。

尝试添加

debugImplementation "androidx.test:core:1.3.0"

应用程序级别的gradle.build文件,以及您正在使用的核心版本。

此外,您不需要同时使用ActivityScenarioRule和ActivityScenrio。选择一个适合你需要的。

ActivityScenarioRule类似于ActivityTestRule。它只需在测试之前启动活动(它在内部调用ActivityScenrio来启动活动(。

活动场景为您提供了更多的控制,因为它允许您在测试期间启动活动,甚至在测试期间切换活动。

发生这种情况可能是因为Android试图将此活动小型化两次。您可以使用ActivityTestRule来启动活动并自行管理,也可以自己使用ActivityScenario.launch进行管理。我建议在你的情况下使用ActivityTestRule

文件:https://developer.android.com/reference/androidx/test/ext/junit/rules/ActivityScenarioRule

使用ActivityScenarioRule,您不需要像以前那样强制转换启动,因为该规则已经为您强制转换了。还要在测试运行后进行关闭。只要删除前后规则,测试就会正常工作。如果您需要使用此库,请从活动中获取一些信息。您可以使用ApplicationProvider.getApplicationContext创建一个Context实例,然后可以像以前在onActivity上一样使用它。

最新更新