使用Espresso进行测试时,在<package>中未找到任何测试

15

我想在我的Android应用程序中测试MainActivity。因此,我创建了一个第一个测试用例来测试按钮的功能。如果用户点击该特定按钮,则应该打开一个新的Activity。

这是我的代码:

@RunWith(AndroidJUnit4.class)
public class MainActivityTest {

    @Rule
    public ActivityTestRule<MainActivity> mActivityRule = new ActivityTestRule<>(MainActivity.class);

    @Test
    public void startNewActivityTest() {
        Intents.init();
        onView(withId(R.id.main_new)).perform(click());
        intended(hasComponent(NewActivity.class.getName()));
        Intents.release();
    }

    @Before
    public void setup() {
        closeSoftKeyboard();
    }

}

不幸的是,我得到了以下异常:

junit.framework.AssertionFailedError: No tests found in package.MainActivityTest
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:191)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:176)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:554)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1701)

这是我的Gradle文件:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 19
    buildToolsVersion "23.0.1"

    lintOptions {
        abortOnError false
    }

    defaultConfig {
        applicationId "package"
        minSdkVersion 14
        targetSdkVersion 19
    }

    signingConfigs {
        debug {
            storeFile file(RELEASE_STORE_FILE)
            storePassword RELEASE_STORE_PASSWORD
            keyAlias RELEASE_KEY_ALIAS
            keyPassword RELEASE_KEY_PASSWORD
        }
        release {
            storeFile file(RELEASE_STORE_FILE)
            storePassword RELEASE_STORE_PASSWORD
            keyAlias RELEASE_KEY_ALIAS
            keyPassword RELEASE_KEY_PASSWORD
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }
}

dependencies {
    compile 'com.android.support:support-v4:19.1.0'
    compile 'com.google.android.gms:play-services:4.2.+'
    androidTestCompile 'com.android.support:support-annotations:19.0.1'
    androidTestCompile 'com.android.support.test:runner:0.4.1'
    androidTestCompile 'com.android.support.test:rules:0.4.1'
    androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.1'
    // Set this dependency if you want to use Hamcrest matching
    androidTestCompile 'org.hamcrest:hamcrest-library:1.3'
    androidTestCompile 'com.android.support.test.espresso:espresso-intents:2.2.1'
}

你能发布一些关于你的环境的信息吗(例如Gradle版本,gradle文件等)?你考虑使用Robolectric了吗? - schrieveslaach
也许可以参考这个链接:https://github.com/googlesamples/android-testing/blob/master/ui/espresso/IntentsBasicSample/app/build.gradle#L13 - albodelu
3个回答

27

设置测试工具运行程序

在相同的build.gradle文件中,在android.defaultConfig中添加以下这一行:testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

apply plugin: 'com.android.application'

android {
    ...

    defaultConfig {
        ...

        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
}

dependencies {
    // App's dependencies, including test
    compile 'com.android.support:support-annotations:23.0.1'

    ...
}

我从未使用过Espresso Intents,但也许你需要像这里一样使用这个

在使用Espresso-Intents时,应该使用IntentsTestRule而不是ActivityTestRule。IntentsTestRule使得在功能UI测试中使用Espresso-Intents API更加容易。这个类是ActivityTestRule的扩展,会在每个被@Test注解的测试之前初始化Espresso-Intents,并在每个测试运行后释放Espresso-Intents。每个测试运行后,activity都将被终止,而且此规则可与ActivityTestRule以相同的方式使用。


6
在2020年,你可能想使用这个更新的AndroidX(Jetpack)测试运行器。
android {
    ...
    defaultConfig {
        ...
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
}

1
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

缺失了

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接