2011-10-12 45 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

相關問題