2017-03-26 3 views
1

Ich habe einen SMSReceiver für Android geschrieben und alles funktioniert auf echten Geräten und wenn ich die App über Telnet teste.Testen eines Android-Broadcast-Empfängers für SMS

Aber wie kann ich einen Komponententest für die folgenden onReceive Methode in Android Studio erstellen?

@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

Sie können hier keine Komponententests schreiben, da Sie den Kontext in onReceive benötigen –

Antwort

1

Es hängt davon ab, was Sie testen wollen, aber es sieht so aus, dass der Nachrichtentext und Adresse überprüfen möchten korrekt analysiert wird und die erwarteten Inhalte. In diesem Fall können Sie diese Logik in eine separate Methode aufteilen und testen, indem Sie eine PDU übergeben und den Rückgabewert überprüfen.

Wenn Sie onReceive testen möchten, sollte es möglich sein, Mockito zu verwenden, einen MockContext zu übergeben und GetTextra von Intent vorzutäuschen, um Ihr eigenes Test-Bundle-Objekt zurückzugeben. Trotzdem müssen Sie am Ende etwas verifizieren. Vielleicht planen Sie, die geparsten Daten später irgendwo zu speichern? Wenn dies der Fall ist, können Sie dies als Ihren Überprüfungspunkt verwenden - indem Sie entweder das Argument erfassen und überprüfen oder überprüfen, ob die Daten gespeichert wurden (obwohl dies die Grenzen des Komponententests erheblich erweitert).