gpt4 book ai didi

android - 使用测试支持库销毁并重启 Activity

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:32:58 26 4
gpt4 key购买 nike

在 Android 中使用旧的 JUnit3 样式测试,我可以执行以下操作来销毁并重新启动 Activity :

Instrumentation inst = getInstrumentation();
Activity activity = inst.getActivity();
// do something
activity.finish();
Assert.assertTrue(this.activity.isFinishing());
activity = inst.getActivity();
// assert that activity's state is restored

如何使用新的测试支持库完成同样的事情?我可以使用 Espresso 和/或 UI Automator 或新库提供的任何其他机制。

更新:

我尝试了以下方法:

Activity activity = activityTestRule.getActivity();
// do something
activity.finish();
Assert.assertTrue(this.activity.isFinishing());
activity = activityTestRule.getActivity();
// assert that activity's state is restored

但是,ActivityTestRule.getActivity() 似乎没有重新启动 Activity 。

最佳答案

正如@CommonsWare 提到的,自定义规则非常有用。这是我的简单解决方案(可以进行许多改进,但这只是一个可以构建的快速框架):

public class ControlledActivityTestRule<T extends Activity> extends ActivityTestRule<T> {
public ControlledActivityTestRule(Class<T> activityClass) {
super(activityClass, false);
}

public ControlledActivityTestRule(Class<T> activityClass, boolean initialTouchMode) {
super(activityClass, initialTouchMode, true);
}

public ControlledActivityTestRule(Class<T> activityClass, boolean initialTouchMode, boolean launchActivity) {
super(activityClass, initialTouchMode, launchActivity);
}

public void finish() {
finishActivity();
}

public void relaunchActivity() {
finishActivity();
launchActivity();
}

public void launchActivity() {
launchActivity(getActivityIntent());
}
}

注意,如果你这样做,这个类需要在包android.support.test.rule中才能访问包私有(private)方法ActivityTestRule#finishActivity .然后在您的测试用例中,实现此规则:

@Rule
public ControlledActivityTestRule<TestFountainPreferenceActivity> actRule = new ControlledActivityTestRule<>(TestFountainPreferenceActivity.class);

然后在您的个人测试用例中,调用 actRule.finish()actRule.launchActivity() 终止并重新启动它。或者,如果您在终止它和重新启动它之间不需要做任何事情,您可以调用 actRule.relaunchActivity()。注意,如果你有初始启动,你可以传递第三个参数false来延迟启动activity,然后调用actRule.launchActivity()让它运行,但是你会对一些内置句柄的松散访问,例如 #afterActivityLaunched#afterActivityFinished()

关于android - 使用测试支持库销毁并重启 Activity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35306423/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com