Eigentlich muss ich eine Antwort auf einen API-Aufruf bekommen, dafür brauchte ich Context
.
robolectric
user1667968
quelle
quelle
RuntimeEnvironment.application
statischen Code verwenden (wie mit Anmerkungen versehene Methoden@BeforeClass
), da Robolectric zu diesem Zeitpunkt wahrscheinlich nicht initialisiert wird und der Wert lautetnull
.Sie können verwenden
quelle
Benutze das:
quelle
Hinzufügen
Und benutze:
quelle
Für den neuesten Robolectric 4.3 ab 2019 `
`und
sind beide beraubt. Also benutze ich
Kontext zu bekommen.
quelle
Um den Anwendungskontext zu erhalten, müssen Sie Folgendes tun:
quelle
Dies funktioniert bei mir mit Robolectric 3.5.1:
ShadowApplication.getInstance().applicationContext
quelle
RuntimeEnvironment.application
oderRuntimeEnvironment.application.getApplicationContext()
wenn es für dich funktioniert.Ab Release 4.0-alpha-3 am 21. Juli wurden sie entfernt
ShadowApplication.getApplicationContext()
. Halten Sie sichRuntimeEnvironment.application.getApplicationContext()
für alle mit Anmerkungen versehenen Tests an@RunWith(RobolectricTestRunner::class)
.Abgesehen davon enthält der aktuelle Leitfaden ein Beispiel für das Abrufen von Zeichenfolgenressourcen mithilfe von:
(Beachten Sie, dass die Javadocs für
RuntimeEnvironment
undShadowApplication
derzeit die Nicht-Alpha-Version 3.x widerspiegeln.)quelle
Fügen Sie zunächst Folgendes zu Ihrem hinzu
build.gradle
:testImplementation 'androidx.test:core:1.2.0'
dann benutze:
ApplicationProvider.getApplicationContext() as Application
quelle
In einigen Fällen benötigen Sie möglicherweise den Kontext Ihrer App anstelle des Robolectris-Standardkontexts. Zum Beispiel, wenn Sie Ihren Paketnamen erhalten möchten. Standardmäßig gibt Robolectric Ihren
org.robolectric.default
Paketnamen zurück. Gehen Sie wie folgt vor, um Ihren tatsächlichen Paketnamen zu erhalten:build.gradle
testImplementation 'org.robolectric:robolectric:4.2.1'
Ihre Testklasse:
Stellen Sie sicher, dass in Ihrem Arbeitsverzeichnis Run / Debug Configurations Folgendes festgelegt ist: $ MODULE_DIR $
quelle
Es ist sicherer , zu verwenden ,
Robolectric.getShadowApplication()
anstatt mitRobolectric.application
direkt.quelle
Robolectric.application
Stimmen Sie den Antworten von @EugenMartynov und @rds zu ....
Ein kurzes Beispiel finden Sie bei Volley-Marshmallow-Release
in NetworkImageViewTest.java
// mNIV = new NetworkImageView(Robolectric.application); mNIV = new NetworkImageView(RuntimeEnvironment.application);
Der Volley-Link ist unter https://android.googlesource.com/platform/frameworks/volley/+/marshmallow-release verfügbar
Sie müssen Abhängigkeiten im Volley-Modul in Android Studio hinzufügen als:
dependencies { testCompile 'junit:junit:4.12' testCompile 'org.mockito:mockito-core:1.10.19' testCompile 'org.robolectric:robolectric:3.1.2' }
quelle
In Ihrem Fall sollten Sie sich bewusst sein, was Sie tatsächlich testen. Manchmal ist es ein Zeichen dafür, dass Ihr Code möglicherweise überarbeitet werden muss, wenn Probleme mit nicht testbarem Code oder scheinbar nicht testbarem Code auftreten.
Für eine API-Aufrufantwort möchten Sie möglicherweise den API-Aufruf selbst nicht testen. Es ist möglicherweise nicht erforderlich zu testen, ob es möglich ist, Informationen von einem beliebigen Webdienst zu senden / zu empfangen, sondern dass Ihr Code Ihre Antwort in einem erwarteten Zustand verarbeitet und verarbeitet.
In diesem Fall ist es möglicherweise besser, den Code, den Sie testen möchten, umzugestalten. Brechen Sie das Parsen / Behandeln von Antworten in eine andere Klasse auf, die eine einfache akzeptiert,
String
und führen Sie Ihre Tests für diese Klasse durch, indem Sie Antworten auf Beispielzeichenfolgen einfügen.Dies folgt mehr oder weniger den Vorstellungen von Single Responsibility und Dependency Inversion ( S und D in SOLID ).
quelle
Ok, ich weiß also, dass viele andere diese Antwort schon einmal gesagt haben und möglicherweise bereits veraltet sind
Ich habe null bekommen, weil der when () Teil NACH der Sut-Initialisierung war. Es könnte einigen von Ihnen helfen.
auch ich habe die
zu Beginn des Unterrichts
Ebenfalls
quelle