Cómo detectar si la aplicación de Android está ejecutando la prueba de interfaz de usuario con Espresso
Estoy escribiendo algunas pruebas de Espresso para Android. Estoy corriendo en el el problema siguiente:
Para que un determinado caso de prueba funcione correctamente, necesito desactivar algunas funciones de la aplicación. Por lo tanto, en mi aplicación, tengo que detectar si estoy corriendo Espresso prueba para que pueda desactivar. Sin embargo, no quiero utilizar BuildConfig.DEBUG
porque no quiero que esas características se deshabiliten en una compilación de depuración. Además, me gustaría evitar crear un nuevo buildConfig para evitar que muchas variantes de construcción se creen (ya tenemos muchos sabores definidos).
- Manera correcta de abrir NavigationDrawer y seleccionar elementos en Robotium
- Espresso: espera que la actividad finalice la tarea de fondo después de presionarBack ()
- Espresso Nested Recycler Vistas Prueba de interfaz de usuario
- No se pudo iniciar intención Intent en un plazo de 45 segundos - robotium
- Android Espresso ListView haga clic en el elemento
Yo estaba buscando una manera de definir buildConfigField para la prueba, pero no pude encontrar ninguna referencia en Google.
- Configuración de gradiente y maven espresso para Android
- Comprobación de ViewPager con Espresso. ¿Cómo funciona la acción a un botón de un elemento?
- ¿Es posible tomar una captura de pantalla y probar valores de píxeles con espresso?
- ¿Las pruebas de selenio valen la pena en dispositivos móviles?
- Prueba de desplazamiento sin fin RecyclerView con Espresso y RxJava
- Prueba de interfaz de usuario de Espresso para Android: falla en la ejecución de la prueba: Error en la ejecución de la instrumentación debido a 'java.lang.IllegalAccessError'
- Espresso cómo hacer clic en un ImageView colocado en el primer elemento de la lista?
- ¿Cómo "esperar a la actividad" con Appium, en comenzar y durante la prueba en sí?
Combinado con la respuesta de CommonsWare. Aquí está mi solución:
AtomicBoolean
una variable AtomicBoolean
y una función para comprobar si está ejecutando test:
private AtomicBoolean isRunningTest; public synchronized boolean isRunningTest () { if (null == isRunningTest) { boolean istest; try { Class.forName ("myApp.package.name.test.class.name"); istest = true; } catch (ClassNotFoundException e) { istest = false; } isRunningTest = new AtomicBoolean (istest); } return isRunningTest.get (); }
Esto evita realizar el cheque try-catch cada vez que necesite verificar el valor y sólo ejecuta el cheque la primera vez que llame a esta función.
Combinar el comentario de Commonsware + La solución de Comtaler aquí es una manera de hacerlo para cualquier clase de prueba usando el framework Espresso.
public static synchronized boolean isRunningTest () { if (null == isRunningTest) { boolean istest; try { Class.forName ("android.support.test.espresso.Espresso"); istest = true; } catch (ClassNotFoundException e) { istest = false; } isRunningTest = new AtomicBoolean (istest); } return isRunningTest.get(); }
Basándose en las respuestas anteriores, el siguiente código de Kotlin es equivalente:
val isRunningTest : Boolean by lazy { try { Class.forName("android.support.test.espresso.Espresso") true } catch (e: ClassNotFoundException) { false } }
A continuación, puede comprobar el valor de la propiedad:
if (isRunningTest) { // Espresso only code }
Puede utilizar SharedPreferences para esto.
Establecer modo de depuración:
boolean isDebug = true; SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); SharedPreferences.Editor editor = sharedPref.edit(); editor.putInt("DEBUG_MODE", isDebug); editor.commit();
Compruebe si el modo de depuración:
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); boolean isDebug = sharedPref.getBoolean("DEBUG_MODE", false); if(isDebug){ //Activate debug features }else{ //Disable debug features }
- SQLiteConstraintException no detectado
- La forma más sencilla de mostrar Cuerdas con iconos en un RecyclerView