2017-03-26 86 views
1

我已經爲Android編寫了一個SMSReceiver,並且在真實設備上以及在通過Telnet測試應用時都可以正常工作。測試Android廣播接收器的短信

但是我怎樣才能在Android Studio中創建以下onReceive方法的單元測試?

@Override 
public void onReceive(Context context, Intent intent) { 
    Bundle bundle = intent.getExtras(); 

    if (bundle!=null){ 
     Object[] smsExtras = (Object[]) bundle.get("pdus"); 
     String format = (String)bundle.get("format"); 
     String strMessage = ""; 

     for (Object smsExtra : smsExtras) { 
      SmsMessage smsMessage; 
      if (Build.VERSION.SDK_INT < 23){ 
       smsMessage = SmsMessage.createFromPdu((byte[]) smsExtra); 
      }else { 
       smsMessage = SmsMessage.createFromPdu((byte[]) smsExtra, format); 
      } 

      String messageBody = smsMessage.getMessageBody(); 
      String messageSource = smsMessage.getOriginatingAddress(); 

      strMessage += "SMS from " + messageSource + " : " + messageBody; 
      Log.i(AppConstants.DEBUG_TAG, strMessage); 
     } 

    } 
} 
+0

你不能在這裏編寫單元測試用例,因爲你需要onReceive中的上下文 –

回答

1

這取決於你要測試什麼,但它看起來像你想檢查郵件正文和地址是正確分析和所期待的內容。在這種情況下,您可以將該邏輯分解爲單獨的方法,並通過傳入PDU並檢查返回值來進行單元測試。

如果你想測試onReceive,應該可以使用Mockito,傳入一個MockContext和模擬Intent的getExtra來返回你自己的測試Bundle對象。不過,你最終還是需要驗證一下。也許你打算在以後的某個地方存儲解析的數據?如果是這樣,你可以使用它作爲驗證點 - 通過捕獲和檢查參數,或者驗證數據是否存儲(雖然這擴大了單元測試的邊界)。

相關問題