Android Espresso, не работающий с Multidex, дает "никаких тестов не найдено"

Мои тесты эспрессо выполнялись до тех пор, пока мне не пришлось поддерживать multidex.

My build.gradle, у меня

minSdkVersion 14
targetSdkVersion 23
multiDexEnabled = true

testInstrumentationRunner "com.android.test.runner.MultiDexTestRunner"


androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.1'
androidTestCompile 'com.android.support.test.espresso:espresso-contrib:2.2.1'
androidTestCompile 'com.android.support.test:runner:0.4.1'
androidTestCompile 'com.android.support.test:rules:0.4.1'

dexOptions {
        jumboMode true
        javaMaxHeapSize "4g"
        incremental true
    }

Test1AuthenticationEspressoTest

@RunWith(AndroidJUnit4.class)
@SmallTest
public class Test1AuthenticationEspressoTest {
    @Rule
    public ActivityTestRule<WelcomeActivity> mActivityRule = new  ActivityTestRule(WelcomeActivity.class);

}

Вот ошибка, которую я получаю

junit.framework.AssertionFailedError: тестов не найдено в com.livestrong.tracker.test.Test1AuthenticationEspressoTest

Любая помощь будет оценена. У кого-нибудь есть эспрессо, работающее с multidex?

Ответы

Ответ 1

У меня была такая же проблема, и оказалось, что вам нужно создать пользовательский бегун, который позволяет MultiDex и выходит из AndroidJUnitRunner. Затем вам нужно установить этот бегун как ваш testInstrumentationRunner в build.gradle и как ваш бегун в вашей конфигурации запуска. Нет необходимости модифицировать тестовый класс (сохраняйте @RunWith(AndroidJunit4.class)).

Здесь шаг за шагом, что делать:

  • Создайте класс для своего пользовательского бегуна:

    package com.bla.bla.bla;  // your package
    
    import android.os.Bundle;
    import android.support.multidex.MultiDex;
    import android.support.test.runner.AndroidJUnitRunner;
    
    public class CustomTestRunner extends AndroidJUnitRunner
    {
        @Override
        public void onCreate(Bundle arguments)
        {
            MultiDex.install(getTargetContext());
            super.onCreate(arguments);
        }
    }
    
  • В вашем build.gradle установите бегун на свой пользовательский бегун:

    android {
        // ...
        defaultConfig {
            // ...
            testInstrumentationRunner "com.bla.bla.bla.CustomTestRunner"
        }
    }
    
  • В вашей конфигурации выполнения убедитесь, что контрольно-измерительный прибор также настроен на тот же самый бегун.. Примечание. Этот шаг не требуется в Android Studio 3.x и, возможно, также в некоторых предыдущих версиях. Эта опция больше не существует.

Используя вышеизложенное, я смог запустить тесты Espresso в нашем приложении с поддержкой multi-dex.

Я должен отметить, что многие другие сообщения в сети относительно этой темы предлагают установить ваш бегун на com.android.test.runner.MultiDexTestRunner и исправить некоторые зависимости в com.android.support:multidex-instrumentation:1.0.1 в вашем build.gradle. Это решение больше не имеет места и не работает с gradle 1.5.0. Если у вас есть что-то из этого набора, то это предотвратит работу выше. Подробнее см. Комментарии в этом столбце.