如果测试跨越多个活动,是否有办法获得当前活动?
getActivtiy()方法只提供一个用于启动测试的活动.
我尝试过类似下面的内容,
public Activity getCurrentActivity() {
Activity activity = null;
ActivityManager am = (ActivityManager) this.getActivity().getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningTaskInfo> taskInfo = am.getRunningTasks(1);
try {
Class<?> myClass = taskInfo.get(0).topActivity.getClass();
activity = (Activity) myClass.newInstance();
}
catch (Exception e) {
}
return activity;
}
Run Code Online (Sandbox Code Playgroud)
但我得到了空对象.
使用Android中的旧JUnit3样式测试,我可以执行以下操作来破坏并重新启动活动:
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
Run Code Online (Sandbox Code Playgroud)
如何使用新的测试支持库完成同样的事情?我可以使用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
Run Code Online (Sandbox Code Playgroud)
但是,似乎ActivityTestRule.getActivity()不会重新启动活动.
我正在尝试测试,如果新创建的Activity(在方向更改后)正确地重新初始化.下面的代码显示从getActivity()返回的活动是在setUp()中构造的活动,而不是新创建的活动.
测试:
public class MyActivityTest extends ActivityInstrumentationTestCase2<MyActivity>{
private static final String TAG = "RAMPS";
private MyActivity mActivity;
public MyActivityTest() {
super("com.ramps", MyActivity.class);
}
protected void setUp() throws Exception {
super.setUp();
mActivity = getActivity();
Log.v(TAG, "setUp; activity=" + mActivity);
}
public void testOrienationChange(){
mActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
getInstrumentation().waitForIdleSync();
MyActivity newActivity = getActivity(); //should be new, but it's not
Log.v(TAG, "testOrienationChange; activity=" + newActivity);
}
}
Run Code Online (Sandbox Code Playgroud)
Activiy:
public class MyActivity extends Activity {
private static final String TAG = "RAMPS";
public void onCreate(Bundle savedInstanceState) { …Run Code Online (Sandbox Code Playgroud)