Ich versuche, einen Testfall zu schreiben, um eine Klasse zu überprüfen, die in gemeinsame Einstellungen schreibt. Ich benutze Android Studio v1.5.Android Studio: Ich kann nicht in gemeinsame Einstellungen in instrumentiertem Test schreiben
In der guten alten Eklipse wurde bei Verwendung von AndroidTestCase
eine zweite APK-Datei auf dem Gerät bereitgestellt, und Tests konnten mit dem Instrumentierungskontext ausgeführt werden, sodass Sie Tests unter Verwendung der gemeinsamen Einstellungen der Instrumentierungs-APK ausführen konnten, ohne die Haupt-APKs zu ändern vorhandene gemeinsame Voreinstellungsdateien.
Ich habe den ganzen Morgen damit verbracht herauszufinden, wie man in Android Studio-Tests einen Nicht-Null-Kontext bekommt. Anscheinend sind Komponententests für Eclipse nicht mit dem Test-Framework von Android Studio kompatibel, da der Aufruf getContext()
null zurückgibt. Ich dachte, ich die Antwort in dieser Frage gefunden habe: Get context of test project in Android junit test case
Dinge im Laufe der Zeit verändert haben als alte Versionen von Android Studio nicht die volle Unterstützung beim Test hatte. Viele Antworten sind also nur Hacks. Offenbar jetzt statt InstrumentationTestCase
oder AndroidTestCase
erstrecken sollten Sie Ihre Tests wie folgt schreiben:
@RunWith(AndroidJUnit4.class)
public class MyTest {
@Test
public void testFoo(){
Context instrumentationContext = InstrumentationRegistry.getContext();
Context mainProjectContext = InstrumentationRegistry.getTargetContext();
}
}
So jetzt habe ich eine nicht null Instrumentierung Kontext haben, und die getSharedPreferences
Methode gibt eine Instanz, die aber eigentlich keine Einstellungsdatei zu funktionieren scheint wird geschrieben.
Wenn ich tun:
context = InstrumentationRegistry.getContext();
Dann wird der SharedPreferences Editor schreibt und schreibt korrekt und keine Ausnahme ausgelöst. Ich kann bei näherer Betrachtung sehen, dass der Editor in diese Datei zu schreiben versucht:
data/data/<package>.test/shared_prefs/PREFS_FILE_NAME.xml
Aber die Datei wird nie erzeugt noch geschrieben.
jedoch dies mit:
context = InstrumentationRegistry.getTargetContext();
der Editor korrekt funktioniert und die Präferenzen in diese Datei geschrieben werden:
/data/data/<package>/shared_prefs/PREFS_FILE_NAME.xml
Die Einstellungen werden in privaten Modus instanziiert:
SharedPreferences sharedPreferences = context.getSharedPreferences(fileName, Context.MODE_PRIVATE);
Soweit ich weiß, wurde nach dem Test keine Test-APK auf das Gerät hochgeladen. Dies könnte erklären, warum die Datei nicht mit dem Instrumentierungskontext geschrieben wurde. Ist es möglich, dass dieser Kontext ein gefälschter Kontext ist, der stillschweigend versagt?
Und wenn das der Fall wäre, wie könnte ich einen REAL Instrumentierungskontext erhalten, so dass ich Präferenzen schreiben kann, ohne die Hauptprojekteinstellungen zu ändern?
Sind Ihre Tests im 'test'-Verzeichnis oder unter' testAndroid'? –
Beachten Sie, dass Sie Ihre alten Tests, die 'InstrumentationTestCase' oder' AndroidTestCase' in Android Studio erweitern, weiterhin ausführen können. –
@ Code-Apprentice Dieser Test befindet sich im Ordner androidTest. Ja, Sie können immer noch 'InstrumentationTestCase' und' AndroidTestCase' verwenden, aber Google hat beides sabotiert und 'getContext' gibt null zurück. –