Comtaler Comtaler - 9 months ago 79
Android Question

How to detect whether android app is running UI test with Espresso

I am writing some Espresso tests for Android. I am running in the the following problem:

In order for a certain test case to run properly, I need to disable some features in the app. Therefore, in my app, I need to detect whether I am running Espresso test so that I can disable it. However, I don't want to use

to because I don't want those features to be disabled in a debug build. Also, I would like to avoid creating a new buildConfig to avoid too many build variants to be created (we already have a lot of flavors defined).

I was looking for a way to define buildConfigField for test but I couldn't find any reference on Google.

Answer Source

Combined with CommonsWare's answer. Here is my solution:

I defined an AtomicBoolean variable and a function to check whether it's running test:

private AtomicBoolean isRunningTest;

public synchronized boolean isRunningTest () {
    if (null == isRunningTest) {
        boolean istest;

        try {
            Class.forName ("");
            istest = true;
        } catch (ClassNotFoundException e) {
            istest = false;

        isRunningTest = new AtomicBoolean (istest);

    return isRunningTest.get ();

This avoids doing the try-catch check every time you need to check the value and it only runs the check the first time you call this function.