運行在我的Android項目中,我有一個活動:爲什麼我要開始/綁定我的測試情況下的服務,即使該服務在後臺
public MyActivity extends Activity{
...
@Override
protected void onStart() {
super.onStart();
Intent intent = new Intent(this, MyService.class)
startService(intent);
}
}
在MyActivity
onStart()
,我剛開始MyService
。
我簡單服務只是用來聽手機狀態變化:
public MyService extends Service{
@Override
public int onStartCommand(Intent intent, int arg, int id) {
super.onStartCommand(intent, arg, id);
/*register a PhoneStateListener to TelephonyManager*/
startToListenToPhoneState();// show Toast message for phone state change
return START_STICKY;
}
}
一切正常,啓動我的應用程序後,當我打個電話,我的服務的監聽電話狀態變化&顯示吐司消息。
NEXT,我決定進行單元測試我的項目,所以我在我的測試項目中創建一個AndroidTestCase
:
public class MySimpleTest extends AndroidTestCase{
...
@Override
protected void runTest() {
//make a phone call
String url = "tel:3333";
Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse(url));
mContext.startActivity(mIntent);
}
}
上面的測試案例只是開始了一個電話,並能正常工作了。
我按HOME按鈕將我的應用程序置於後臺,之後,我運行測試用例開始打電話,期待我的服務中的PhoneStateListener
仍然會運行,向我顯示Toast消息, 但它沒有。
後來我想通了,我不得不要麼在我的測試情況下開始或綁定MyService
過,之後我能夠看到PhoneStateListener敬酒消息,當運行我的測試案例,這是爲什麼?我的意思是爲什麼我的服務使用我的應用程序在後臺運行,但我仍然必須啓動或綁定測試用例中的服務才能在運行AndroidTestCase
時觸發MyService
中定義的PhoneStateLister?
嗨,但我不使用ServiceTestCase, – Mellon
你需要考慮使用AndroidTestCase的目的,我使用AndroidTestCase。在你的測試程序中,你沒有測試任何東西,只是打個電話。您需要加載測試中的應用程序的新實例,這意味着您應該從測試用例開始提供服務。我建議你閱讀這個測試基礎:http://developer.android.com/tools/testing/testing_android.html – SLee