Android 如何通过使用Robotium调用onResume来自动测试onResume行为?
我正在使用Robotium对Android应用程序进行功能测试。我想在调用onDestroy后测试onResume行为。 关于使用仪器的提示,但我无法让它工作。 我已经包括了以下内容,但是这失败了,因为有一个非法的例外。 是否可以销毁应用程序并重新启动Android 如何通过使用Robotium调用onResume来自动测试onResume行为?,android,functional-testing,robotium,onresume,ondestroy,Android,Functional Testing,Robotium,Onresume,Ondestroy,我正在使用Robotium对Android应用程序进行功能测试。我想在调用onDestroy后测试onResume行为。 关于使用仪器的提示,但我无法让它工作。 我已经包括了以下内容,但是这失败了,因为有一个非法的例外。 是否可以销毁应用程序并重新启动 public class MainActivityFunctionalTest extends ActivityInstrumentationTestCase2<MainActivity> { private Solo solo;
public class MainActivityFunctionalTest extends ActivityInstrumentationTestCase2<MainActivity> {
private Solo solo;
public MainActivityFunctionalTest() {
super(MainActivity.class);
}
public void testActionList() {
getInstrumentation().callActivityOnDestroy(solo.getCurrentActivity());
...
}
这里有两个问题,第一个问题是插装callactivityondestroy方法要求您从主线程调用它。有关如何执行此操作的详细信息,请参阅
第二个问题是(我在这里可能错了)不应该从onDestroy转到onResume,因为onDestroy之后,活动实际上被破坏了。您必须创建活动的新实例才能获得另一个onResume。你可以通过再次启动你的活动。我想你可以用你自己的方式来做,但我不确定它的有效性如何。如果你想用这种方式来做,就用我链接到的问题中提到的onResume的方式来调用onResume。谢谢。我添加并调用了这个
public void callActivityOnDestroy(final Activity activity){
getInstrumentation().runOnMainSync(new Runnable() {
public void run() {
activity.finish();
}
});
}
public void callActivityStart(final Activity activity){
getInstrumentation().runOnMainSync(new Runnable() {
public void run() {
activity.startActivity(new Intent(activity, MainActivity.class));
}
});
}
或者(在我的情况下)我可以打电话(如果我不想完成终止流程):
我认为你无法恢复已经被破坏的活动。如果您的活动未被销毁,但仅已停止,则可以重新启动并继续。OnResume需要在UI线程上调用,因此假设要在活动已经运行后测试恢复状态,可以执行以下操作:
@UiThreadTest
public void testResumeAfterStop() {
Instrumentation instr = this.getInstrumentation();
// here, test or record down whatever should be tested
// when the activity is in resume state the first time
instr.callActivityOnPause(getActivity());
instr.callActivityOnStop(getActivity());
instr.callActivityOnRestart(getActivity());
instr.callActivityOnStart(getActivity());
instr.callActivityOnResume(getActivity());
// Now you are in the resume state again.
// Test whatever you need here.
}
您可以模拟如下所示的配置更改:
getInstrumentation().runOnMainSync(new Runnable() {
@Override
public void run() {
activity.recreate();
}
});
setActivity(null);
activity = getActivity();
这将导致创建活动的一个新实例,并且它应该正确地经历生命周期(包括将要从中恢复的捆绑包传递到新活动)。请注意,这仅适用于蜂巢(API级别11)及更高版本。若要消除此异常,请尝试在instrumentation对象上使用runOnMainSync
@UiThreadTest
public void testResumeAfterStop() {
Instrumentation instr = this.getInstrumentation();
// here, test or record down whatever should be tested
// when the activity is in resume state the first time
instr.callActivityOnPause(getActivity());
instr.callActivityOnStop(getActivity());
instr.callActivityOnRestart(getActivity());
instr.callActivityOnStart(getActivity());
instr.callActivityOnResume(getActivity());
// Now you are in the resume state again.
// Test whatever you need here.
}
getInstrumentation().runOnMainSync(new Runnable() {
@Override
public void run() {
activity.recreate();
}
});
setActivity(null);
activity = getActivity();