2013-12-19 222 views
0

我有一個Robotium測試用例,並且應當像Robotium測試用例

  • UI應用開始將數據上載到服務器
  • 用戶交換到
  • 載操作是在運行在設備上的其他應用程序背景
  • 用戶來到主UI應用

如何保持上傳數據背部的軌道地面?我們可以爲此使用多線程嗎?

try { 
     mSolo.clickOnMenuItem("UPLOAD"); 
     mSolo.sleep(1000); 
     Instrumentation inst = new Instrumentation(); 
     inst.sendKeyDownUpSync(KeyEvent.KEYCODE_BACK); 
     mSolo.waitForActivity(Settings.ACTION_APPLICATION_SETTINGS); 
     mSolo.goBack(); 
     mSolo.assertCurrentActivity("main", 
       UIActivity.class); 

    } catch (Exception e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

此編碼是否正確?如果不建議我修改或正確的代碼。

幫助總是讚賞,

感謝

+0

此代碼正在運行,但我不確定。 – Randroid

+0

我想要實現UI和後臺線程,我怎樣才能做到這一點,以便儘管用戶回來,後臺線程不應該被殺死。 – Randroid

回答

0

你不能離開你的應用程序,並用儀器再次運行。這部分是不正確的:

Instrumentation inst = new Instrumentation(); 
inst.sendKeyDownUpSync(KeyEvent.KEYCODE_BACK); 

爲什麼你要創建新的儀器?你可以簡單地運行:

getInstrumentation().sendKeyDownUpSync(KeyEvent.KEYCODE_BACK); 

順便說一下,solo.goBack()只是做它,所以它沒有任何意義與儀器來調用它。我會簡單地將它改寫爲:

try { 
    mSolo.clickOnMenuItem("UPLOAD"); 
    mSolo.sleep(1000); 
    mSolo.goBack(); 
    assertTrue(mSolo.waitForActivity(Settings.ACTION_APPLICATION_SETTINGS)); 
    mSolo.goBack(); 
    mSolo.assertCurrentActivity("main", UIActivity.class); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 
+0

感謝您的代碼,但它在這裏崩潰assertTrue(mSolo.waitForActivity(Settings.ACTION_APPLICATION_SETTINGS)); – Randroid

+0

我們如何使用ui和工作線程來實現這一點? – Randroid

1

,除非你用自己的密鑰簽名的第三方應用不能與其他應用程序交互(見black box testing)。

但你可以按什麼首頁,返回和開始intents。下面的代碼是未經測試,但希望給你一個想法:

try { 
    mSolo.clickOnMenuItem("UPLOAD"); // start upload 
    mSolo.sleep(1000); 
    mSolo.goBack(); // leave app 
    ... 
    Intent intent = new Intent("com.company.another.app.SomeActivity"); 
    startActivity(inent); // start another app 
    ... 
    // option one: get app context and use it for access on preferences, etc. 
    Context context = this.getInstrumentation().getTargetContext().getApplicationContext(); 
    // option two: wait for logs that you write while uploading  
    solo.waitForLogMessage("Upload completed"); 
    ... 
    Intent intent = new Intent("com.myapp.MyMainUIActivity"); 
    startActivity(inent); // start own Main Activity again 
    ... 
} catch (Exception e) { 
    e.printStackTrace(); 
} 

所以,你可以使用,以跟蹤上傳進度日誌消息,喜好或你的應用程序中的任何其他方法。