0

運行在我的Android項目中,我有一個活動爲什麼我要開始/綁定我的測試情況下的服務,即使該服務在後臺

public MyActivity extends Activity{ 
    ... 
    @Override 
    protected void onStart() { 
    super.onStart(); 
     Intent intent = new Intent(this, MyService.class) 
     startService(intent); 
    } 
} 

MyActivityonStart(),我剛開始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?

回答

0

在Android中ServiceTestCase文檔,它說,

測試用例等待調用的onCreate(),直到你的一種測試方法調用startService(意向)或bindService(意圖)。這使您有機會在測試正在運行的服務之前設置或調整任何其他框架或測試邏輯。

我認爲AndroidTestCase提供了一個框架,您可以在受控環境中測試您的活動,服務等,這樣您至少應該在測試與服務交互之前啓動您的服務。

參考:http://developer.android.com/reference/android/test/ServiceTestCase.html

+0

嗨,但我不使用ServiceTestCase, – Mellon

+0

你需要考慮使用AndroidTestCase的目的,我使用AndroidTestCase。在你的測試程序中,你沒有測試任何東西,只是打個電話。您需要加載測試中的應用程序的新實例,這意味着您應該從測試用例開始提供服務。我建議你閱讀這個測試基礎:http://developer.android.com/tools/testing/testing_android.html – SLee

相關問題