Android 测试最近启动的活动是否已实际启动

Android 测试最近启动的活动是否已实际启动,android,junit,Android,Junit,我已经研究了一些类似的问题,但是yeet没有成功地测试这个问题 我尝试了这个,但对我来说,origactivity结果是null,所以我使用.baseIntent.getComponent()来标识启动的活动(我想这应该会给我相同的结果?) 我的JUnit测试代码: public class MainMenuTest extends ActivityInstrumentationTestCase2<MainMenuActivity> { public Ma

我已经研究了一些类似的问题,但是yeet没有成功地测试这个问题

我尝试了这个,但对我来说,origactivity结果是null,所以我使用.baseIntent.getComponent()来标识启动的活动(我想这应该会给我相同的结果?)

我的JUnit测试代码:

public class MainMenuTest extends
        ActivityInstrumentationTestCase2<MainMenuActivity> {

    public MainMenuTest() {
        super("package.name", MainMenuActivity.class);
    }

    private MainMenuActivity mActivity;
    private ActivityManager am;

    public void setUp() throws Exception {
        super.setUp();
        mActivity = this.getActivity();
        am = (ActivityManager) mActivity.getSystemService(Service.ACTIVITY_SERVICE);
        Intent i = new Intent(mActivity, GameActivity.class).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        mActivity.startActivity(i);
    }

    public void testNewGameButton() {
        final ActivityManager am2 = am;

        mActivity.runOnUiThread(new Runnable() {
            public void run() {                 
                List<ActivityManager.RecentTaskInfo> processes = am2.getRecentTasks(2, ActivityManager.RECENT_WITH_EXCLUDED);
                ActivityManager.RecentTaskInfo recentTask = processes.get(0);
                assertEquals(recentTask.baseIntent.getComponent().getClassName(), GameActivity.class.getName());
            }
        });
    }
}
公共类MainMenuTest扩展
ActivityInstrumentationTestCase2{
公共MainMenuTest(){
super(“package.name”,MainMenuActivity.class);
}
私人主活动;
私人活动经理am;
public void setUp()引发异常{
super.setUp();
mActivity=this.getActivity();
am=(ActivityManager)mActivity.getSystemService(Service.ACTIVITY_服务);
意向i=新意向(mActivity,GameActivity.class).setFlags(意向.FLAG\u ACTIVITY\u CLEAR\u TOP);
恒星触觉(i);
}
public void testNewGameButton(){
最终活动管理器am2=am;
mActivity.runOnUiThread(新的Runnable(){
public void run(){
列出进程=am2.getRecentTasks(2,ActivityManager.RECENT_,不包括_);
ActivityManager.RecentTaskInfo recentTask=processs.get(0);
assertEquals(recentTask.baseIntent.getComponent().getClassName(),GameActivity.class.getName());
}
});
}
}
不幸的是,这会导致
assertEquals(recentTask.baseIntent.getComponent().getClassName(),
断言失败


这是为什么?有没有更好的方法来测试这一点?

断言失败,因为
ActivityManager.getRecentTasks(…)
返回导致创建新活动的活动,在您的情况下是
MainMenuActivity
,而不是
GameActivity
。您可以这样使用:

public class MainMenuTest extends
        ActivityInstrumentationTestCase2<MainMenuActivity> {

    public MainMenuTest() {
        super("package.name", MainMenuActivity.class);
    }

    private MainMenuActivity mActivity;
    private ActivityMonitor mGameActivityMonitor;

    public void setUp() throws Exception {
        super.setUp();
        mActivity = this.getActivity();
        Intent i  = new Intent(mActivity,
                GameActivity.class).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

        // Add a monitor before we start the activity
        mGameActivityMonitor = 
                new ActivityMonitor(GameActivity.class.getName(), null, false);
        getInstrumentation().addMonitor(mGameActivityMonitor);

        mActivity.startActivity(i);
    }

    public void testNewGameButton() {
        // Use the monitor to ensure the activity was started
        Activity activity = mGameActivityMonitor.waitForActivityWithTimeout(5 * 1000);
        assertNotNull("Activity was not started", activity);
    }
}
公共类MainMenuTest扩展
ActivityInstrumentationTestCase2{
公共MainMenuTest(){
super(“package.name”,MainMenuActivity.class);
}
私人主活动;
私人活动监测仪MGAME活动监测仪;
public void setUp()引发异常{
super.setUp();
mActivity=this.getActivity();
意向i=新意向(活动性,
设置标志(意图.标志\活动\清除\顶部);
//在开始活动之前添加监视器
mGameActivityMonitor=
新的ActivityMonitor(GameActivity.class.getName(),null,false);
getInstrumentation().addMonitor(mGameActivityMonitor);
恒星触觉(i);
}
public void testNewGameButton(){
//使用监视器确保活动已启动
活动活动=mGameActivityMonitor.waitForActivityWithTimeout(5*1000);
assertNotNull(“活动未启动”,活动);
}
}