不使用Multidex的Android Espresso提供"未找到任何测试"

时间:2016-01-07 00:45:23

标签: android android-espresso android-multidex

我的Espresso测试一直在运行,直到我不得不支持multidex。

我的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

任何帮助将不胜感激。有人使用浓缩咖啡吗?

1 个答案:

答案 0 :(得分:40)

我遇到了同样的问题,事实证明你需要构建一个支持MultiDex并从AndroidJUnitRunner扩展的自定义运行器。然后,您需要将该运行器设置为build.gradle中的testInstrumentationRunner,并将其设置为运行配置中的运行器。无需修改测试类(保留@RunWith(AndroidJunit4.class))。

以下是如何做的一步一步:

  1. 为自定义运行器创建一个类:

    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);
        }
    }
    
  2. 在build.gradle中,将跑步者设置为自定义跑步者:

    android {
        // ...
        defaultConfig {
            // ...
            testInstrumentationRunner "com.bla.bla.bla.CustomTestRunner"
        }
    }
    
  3. 在您的运行配置中,make sure the instrumentation runner is also set to the same runner.注意: Android Studio 3.x以及某些先前版本不需要此步骤。此选项不再存在。

  4. 使用上述内容,我可以在支持多人dex的应用程序上运行Espresso测试。

    我应该注意网上有关此主题的许多其他帖子,建议将您的跑步者设置为com.android.test.runner.MultiDexTestRunner,并在build.gradle中的com.android.support:multidex-instrumentation:1.0.1中排除某些依赖关系。该解决方案似乎不再是这种情况,并且不适用于gradle 1.5.0。如果你有任何设置的东西,那么它将阻止上述工作。有关详细信息,请参阅this stack overflow post中的注释。