Detección contexto de test

A veces, necesitamos diferenciar si estamos ejecutando nuestro código con normalidad o, por contra, nos encontramos en un contexto de test automatizados.

Supuestamente existe un método isRunningInTestHarness para hacer esto mismo, aunque en mi experiencia no funciona.

Una alternativa posible para hacer esto sería aprovecharnos de la estructura de proyecto que propone el sistema de construcción Gradle y los recursos de Android.

Para ello, en el directorio src/main/res/values/ crearíamos un fichero xml de recursos de Android (p.ej: configuration.xml) con un boolean a false:

<bool android:name="running_in_test_harness">false</bool>

También en el directorio src/androidTest/res/values/ crearemos el mismo fichero configuration.xml con el mismo boolean pero esta vez con valor true.

<bool android:name="running_in_test_harness">true</bool>

Posteriormente podemos obtener el valor de la siguiente manera:

public static boolean isRunningInTestHarness(Context context) {
	return context.getResources().getBool(R.bool.running_in_test_harness);
}