En realidad, necesito obtener una respuesta de una llamada a la API, para eso lo solicité Context
.
robolectric
usuario1667968
fuente
fuente
RuntimeEnvironment.application
en código estático (como los métodos anotados con@BeforeClass
) ya que Robolectric probablemente no se inicializará en ese punto y el valor seránull
.Puedes usar
fuente
Utilizar este:
fuente
Añadir
Y use:
fuente
Para el último Robolectric 4.3 a partir de ahora en 2019 '
y
Ambos están depricados. Entonces estoy usando
para obtener el contexto.
fuente
Para obtener el contexto de la aplicación, debe hacer lo siguiente:
fuente
Esto me funciona con Robolectric 3.5.1:
ShadowApplication.getInstance().applicationContext
fuente
RuntimeEnvironment.application
oRuntimeEnvironment.application.getApplicationContext()
si funciona para usted.A partir del lanzamiento 4.0-alpha-3 del 21 de julio, eliminaron
ShadowApplication.getApplicationContext()
. SigaRuntimeEnvironment.application.getApplicationContext()
para cualquier prueba anotada con@RunWith(RobolectricTestRunner::class)
.Como acotación al margen, su guía actual tiene un ejemplo de cómo obtener recursos de cadena usando:
(Tenga en cuenta que los javadocs para
RuntimeEnvironment
yShadowApplication
actualmente reflejan la versión 3.x no alfa).fuente
Primero agregue lo siguiente a su
build.gradle
:testImplementation 'androidx.test:core:1.2.0'
luego usa:
ApplicationProvider.getApplicationContext() as Application
fuente
En algunos casos, es posible que necesite el contexto de su aplicación en lugar del contexto predeterminado de Robolectris. Por ejemplo, si desea obtener el nombre de su paquete. Por defecto, Robolectric le devolverá el
org.robolectric.default
nombre del paquete. Para obtener el nombre real de su paquete, haga lo siguiente:build.gradle
testImplementation 'org.robolectric:robolectric:4.2.1'
Tu clase de prueba:
Asegúrese de que en su directorio de trabajo Run / Debug Configurations esté establecido en: $ MODULE_DIR $
fuente
Es más seguro usarlo en
Robolectric.getShadowApplication()
lugar de usarloRobolectric.application
directamente.fuente
Robolectric.application
De acuerdo con las respuestas de @EugenMartynov y @rds ....
Se puede encontrar un ejemplo rápido en Volley-Marshmallow-Release
en NetworkImageViewTest.java
// mNIV = new NetworkImageView(Robolectric.application); mNIV = new NetworkImageView(RuntimeEnvironment.application);
El enlace de Volley está disponible https://android.googlesource.com/platform/frameworks/volley/+/marshmallow-release
tienes que agregar dependencias en el módulo de volley en Android Studio como:
dependencies { testCompile 'junit:junit:4.12' testCompile 'org.mockito:mockito-core:1.10.19' testCompile 'org.robolectric:robolectric:3.1.2' }
fuente
En su caso, creo que debería tener en cuenta lo que está probando. A veces, encontrarse con problemas de código no comprobable o código aparentemente no comprobable es una señal de que tal vez su código deba ser refactorizado.
Para una respuesta a una llamada de API, es posible que no desee probar la propia llamada de API. Puede que no sea necesario probar que es posible enviar / recibir información de cualquier servicio web arbitrario, sino que su código maneja y procesa su respuesta de la manera esperada.
En cuyo caso, sería mejor refactorizar el código que está intentando probar. Divida el análisis / manejo de respuestas en otra clase que acepte un simple
String
y haga sus pruebas en esa clase inyectando respuestas de cadena de muestra.Esto es más o menos siguiendo las ideas de Responsabilidad Única e Inversión de Dependencia (La S y D en SOLID )
fuente
Ok, sé que muchos otros dijeron esta respuesta antes y es posible que ya estén desactualizados
Obtuve nulo, porque la parte when () fue DESPUÉS de la inicialización de sut. Podría ayudar a algunos de ustedes.
tambien tengo el
al comienzo de la clase
también
fuente