Obtenga el contexto del proyecto de prueba en el caso de prueba de Android junit
¿Alguien sabe cómo puede obtener el contexto del proyecto de prueba en el caso de prueba Android junit (se extiende AndroidTestCase).
Nota: La prueba NO es prueba de instrumentación.
- ¿Por qué AndroidTestCase.getContext (). GetApplicationContext () devuelve null?
- Android Robotium - ¿Cómo administrar el orden de ejecución de los testcases?
- Android Studio JUnit pruebas Java puro
- Ejecute la prueba Junit utilizando la instrumentación de android en un paquete con clases en orden específico
- Error en la instrumentación Android: error de aserción
Nota 2: Necesito el contexto del proyecto de prueba, no el contexto de la aplicación real que se prueba.
Necesito esto para cargar algunos archivos de los activos del proyecto de prueba.
- Excepción en el subproceso "main" java.lang.NoClassDefFoundError: junit / textui / ResultPrinter Después de actualizar a Yosemite
- Prueba con elementos de interfaz de usuario en la vista de Android
- ¿Cómo ejecutar la prueba de unidad en un módulo de Android?
- Android Studio no puede resolver org.junit
- Agrupación de pruebas roboeléctricas utilizando junit Category en un proyecto gradle de Android
- Prueba de unidad AsyncTaskLoader con getLoaderResultSynchronously
- Android JUnit: define una subclase de aplicación diferente
- Unidad de prueba SparseArray utilizando JUnit (utilizando JVM)
Hay un nuevo enfoque con Android Testing Support Library (actualmente com.android.support.test: runner: 0.3) publicado.
@RunWith(AndroidJUnit4.class) @MediumTest public class SomeClassTest { private Context instrumentationCtx; @Before public void setup() { instrumentationCtx = InstrumentationRegistry.getContext(); } @Test public void someTest() { ...
Si también quieres ejecutar el contexto de la aplicación:
InstrumentationRegistry.getTargetContext();
Mira aquí: ¿Cuál es la diferencia entre getTargetContext () y getContext (en InstrumentationRegistry)?
Después de algunas investigaciones, la única solución de trabajo parece ser la que ya señaló. Tendrías que ampliar InstrumentationTestCase y luego acceder al contexto de tu aplicación de prueba usando getInstrumentation (). GetContext () – aquí hay un fragmento de código breve usando las sugerencias anteriores:
public class PrintoutPullParserTest extends InstrumentationTestCase { public void testParsing() throws Exception { PrintoutPullParser parser = new PrintoutPullParser(); parser.parse(getInstrumentation().getContext().getResources().getXml(R.xml.printer_configuration)); } }
Como se puede leer en el código fuente AndroidTestCase , el método getTestContext()
se oculta.
/** * @hide */ public Context getTestContext() { return mTestContext; }
Puede omitir la anotación @hide
utilizando la reflexión.
Sólo tienes que añadir el siguiente método en tu AndroidTestCase
:
/** * @return The {@link Context} of the test project. */ private Context getTestContext() { try { Method getTestContext = ServiceTestCase.class.getMethod("getTestContext"); return (Context) getTestContext.invoke(this); } catch (final Exception exception) { exception.printStackTrace(); return null; } }
Luego llame a getTestContext()
cuando quiera. 🙂
Debería extenderse desde AndroidTestCase en lugar de TestCase.
Descripción de la clase AndroidTestCase
Amplíe esto si necesita acceder a Recursos u otras cosas que dependen del Contexto de Actividad.
AndroidTestCase – Desarrolladores de Android
Si sólo necesita acceder a los recursos de su proyecto, puede utilizar el método getActivity () de la clase ActivityInstrumentationTestCase2 :
//... private YourActivityClass mActivity; @Override protected void setUp() throws Exception { //... mActivity = getActivity(); } //... public void testAccessToResources() { String[] valueList; valueList = mActivity.getResources().getStringArray( com.yourporject.R.array.test_choices); }
Las otras respuestas están obsoletas. Ahora mismo cada vez que extiendes AndroidTestCase, hay mContext objeto de contexto que puedes usar.
- Eliminar archivo del almacenamiento interno
- Android: BitmapFactory.decodeStream () sin memoria con un archivo de 400 KB con 2 MB de montón libre