2011-10-12 47 views
3

我已经研究过几个类似的问题,但还没有设法成功测试过这个问题。测试最近启动的活动是否已经开始

Android - testing if another activity has started

我想这一个,但对我来说,origactivity原来是空的,所以我用.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()); 
      } 
     }); 
    } 
} 

不幸的是,这将导致assertEquals(recentTask.baseIntent.getComponent().getClassName(),断言失败。

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

回答

3

断言失败,因为要创建导致新taskActivityManager.getRecentTasks(...)回报活动,并在你的情况是MainMenuActivity,不GameActivity。你可以使用Instrumentation.ActivityMonitor,但是,像这样:

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); 
    } 
} 
+0

正是我想要的。谢谢! – Datoraki

相关问题