相关疑难解决方法(0)

在Espresso android中获取当前活动

如果测试跨越多个活动,是否有办法获得当前活动?

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 ui-automation android-espresso

41
推荐指数
6
解决办法
3万
查看次数

使用测试支持库销毁并重新启动活动

使用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()不会重新启动活动.

testing android android-testing testing-support-library

9
推荐指数
1
解决办法
6228
查看次数

Android的仪器测试 - 如何在方向更改后接收新的活动?


我正在尝试测试,如果新创建的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)

instrumentation android unit-testing android-testing

5
推荐指数
1
解决办法
4562
查看次数