2012-12-13 65 views
3

我有一個ActivityInstrumentationTestCase2與測試執行Button.click()。按鈕應該啓動其他活動來完成一些工作。 我認爲Button.performClick()正確執行,但測試在其他Activity執行之前完成。Android測試框架performClick()不啓動活動

@UiThreadTest 
public void test() { 

    Intent i = new Intent(this.myActivity, MyActivity.class); 
    myActivity.startActivity(i);  


    Button button = (Button) myActivity.findViewById(R.id.button); 
    button.performClick(); 


} 

我嘗試了以下工作,但我認爲這是一個比解決方案好的解決方法。

public void test() { 

    Intent i = new Intent(this.myActivity, MyActivity.class); 
    myActivity.startActivity(i);  


    Button button = (Button) myActivity.findViewById(R.id.button); 
    button.performClick(); 

    try { 
    Thread.sleep(50000); 
    } catch (InterruptedException e) { 
     Log.e("MyTest", e.getMessage()); 
    } 


} 

沒有更好的方法嗎?

+0

該按鈕點擊已暫停的活動 – njzk2

+0

我認爲這給出了您的案例的答案http://stackoverflow.com/questions/5633141/android-unittest –

+0

Thx爲您的答案Erik,我會嘗試它並在此解釋結果 – JackDaRippa

回答

0

這是我的最終解決方案:再次

public void test() { 

    Instrumentation instrumentation = getInstrumentation(); 

    // Prepare a monitor for your activity 
    Instrumentation.ActivityMonitor monitor = instrumentation.addMonitor(MyActivity.class.getName(), null, false); 

    // Start your activity manually 
    Intent intent = new Intent(Intent.ACTION_MAIN); 
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    intent.setClassName(instrumentation.getTargetContext(), MyActivity.class.getName()); 
    instrumentation.startActivitySync(intent); 

    Activity myActivity = getInstrumentation().waitForMonitor(monitor); 

    Button upSend = (Button) myActivity.findViewById(R.id.button); 
    upSend.performClick(); 

    Log.d("MyTest", "button clicked"); 

    //wait for SecondActivity to start (called by MyActivity) 
    monitor = instrumentation.addMonitor(SecondActivity.class.getName(), null, false); 
    Activity secondActivity = getInstrumentation().waitForMonitor(monitor); 

    int count = 0; 

    //wait until SecondActivity is finishing 
    while(!secondActivity.isFinishing()) { 

     Log.d("MyTest", "waiting - " + ++count); 
     try { 
      Thread.sleep(1000); 
     } catch (InterruptedException e) { 

      Log.e("MyTest",e.getMessage()); 
     } 
    } 

} 

THX埃裏克;現在第二個活動由按鈕開始,測試正在等待它完成。