Ich bin derzeit ein bisschen verwirrt über Intent
Extras. Ich weiß, dass die so genannten Extras sind ein Bundle
und die Bundle
ist intern eine Karte.Simple Intent - jUnit-Test schlägt fehl
Und wenn ich etwas in diese Karte mit intent.putExtra("someName", "someValue");
setze, erwarte ich, dass jetzt ein Schlüssel namens "someName" in der Karte vorhanden ist. Aber es ist nicht, nach meinem sehr einfachen Unit-Test.
public void testIntent(){
assertTrue("true != true", true);
assertFalse("false != false", false);
final String extraName = "IamAnExtra";
final String extraValue = "IamAValue";
Intent intent = new Intent();
intent.putExtra(extraName, extraValue);
assertTrue("hasExtra==false", intent.hasExtra(extraName));
}
Jetzt THS Ergebnisse in der folgenden:
junit.framework.AssertionFailedError: hasExtra==false
Welche Art von Magie hinter der Intent-Code geschieht? Ich weiß, dass es normalerweise funktioniert. Ist die Karte zwischengespeichert und nur geschrieben, wenn ich die Absicht sende? Vielen Dank im Voraus!
Edit:
Ich habe die Linie assertNotNull("extras == null", intent.getExtras());
die ebenfalls ausfällt.
Und ich überprüft den Code von den Methoden putExtra
und getExtras
, das ist:
public Intent putExtra(String name, String value) {
if (mExtras == null) {
mExtras = new Bundle();
}
mExtras.putString(name, value);
return this;
}
und
public Bundle getExtras() {
return (mExtras != null)
? new Bundle(mExtras)
: null;
}
Also, wenn die Mitglieds mExtras null ist, wird Null für getExtras zurückgegeben. Aber putExtra erstellt eine neue Bundle-Instanz für mExtras
, daher mExtras
sollte nicht null sein. Ich bin verwirrt.
Führen Sie es als _unit test_ oder als _instrumented test_? Und welchen Rahmen verwendest du, JUnit 4? – josemigallas
Komponententest. Ich habe einen normalen Testfall benutzt. – JacksOnF1re
Ich habe gedacht, dass die Verwendung einer einfachen Absicht in Ordnung ist, mit einer guten alten Einheit zu verwenden, nicht wahr? Ich werde nicht versuchen, es oder etwas anderes zu senden. – JacksOnF1re