android - 仪器测试 - setContentView() 上的空指针异常

标签 android testing nullpointerexception android-espresso

我有一个位于 app/androidTest/java/myapp 的仪器测试。我有一个简单的测试方法:

public class LoginActivityTest {

    private static final String EMAIL = "admin@gmail.com";
    private static final String PASSWORD = "admin";

    @Rule
    public IntentsTestRule<LoginActivity> loginActivity = new IntentsTestRule<>(LoginActivity.class);

    @Test
    public void LoginWithProperCredentials() {
        onView(withId(R.id.email_textView))
                .perform(typeText(EMAIL));
        onView(withId(R.id.password_login))
                .perform(typeText(PASSWORD));
        onView(withId(R.id.email_sign_in_button))
                .perform(click());

        intended(allOf(
                hasExtra(GeneralConstants.AUTHENTICATED, true),
                hasExtra(GeneralConstants.TOKEN, isA(String.class)),
                toPackage("myapp")));
    }
}

我已经升级了 Android 支持存储库,添加了必要的 androidTestCompile 依赖项以及默认的 testInstrumentationRunner ("android.support.test.runner.AndroidJUnitRunner"),并且我已经选择 Android Instrumentation Tests 作为 Build Variant。然而,尝试启动测试时出现 ResourceNotFoundException。我发现,是 onCreate(Bundle bundle) 中的 setContentView() 方法抛出了这个异常。

我一直在为这个问题苦苦挣扎。可能是什么原因?

编辑:

我检查过 myapp.test.R 中缺少导致 ResourceNotFoundException 的字段。此字段也在 myapp.R 中,但它具有不同的关联值(test.R 中的 0x7f040015 和 0x7f030015 - 这个缺失)。我试图显式导入:

import pl.kawowydzienniczek.kawowydzienniczek.test.R; 

然后试着写:

onView(withId(R.id.email_textView))
                .perform(typeText(EMAIL));

给我一​​个错误,说 email_textView 无法解析。 应该怎么做?

编辑 2:

我注意到注释掉以下依赖项

androidTestCompile 'com.android.support.test.espresso:espresso-contrib:2.2.2'

让它发挥作用。现在应该没问题,但为什么会这样,以及如何在不丢弃该库的情况下制作 Espresso ?

最佳答案

根据

For now it should be okay, but why is that and how to make espresso work without throwing that library out?

这是我的 build.gradle 配置:

dependencies {
    ext.JUNIT_VERSION = '4.12'
    ext.SUPPORT_VERSION = '24.1.1'
    ext.ESPRESSO_VERSION = '2.2.2'

    compile fileTree(dir: ulibs', include: ['*.jar'])
    testCompile "junit:junit:$JUNIT_VERSION"
    testCompile("org.robolectric:robolectric:3.0") {
        exclude module: 'classworlds'
        exclude module: 'commons-logging'
        exclude module: 'httpclient'
        exclude module: 'maven-artifact'
        exclude module: 'maven-artifact-manager'
        exclude module: 'maven-error-diagnostics'
        exclude module: 'maven-model'
        exclude module: 'maven-project'
        exclude module: 'maven-settings'
        exclude module: 'plexus-container-default'
        exclude module: 'plexus-interpolation'
        exclude module: 'plexus-utils'
        exclude module: 'wagon-file'
        exclude module: 'wagon-http-lightweight'
        exclude module: 'wagon-provider-api'
    }

    compile "com.android.support:appcompat-v7:$SUPPORT_VERSION"
    compile "com.android.support:design:$SUPPORT_VERSION"

    androidTestCompile 'com.android.support.test:runner:0.5'
    androidTestCompile "com.android.support:support-annotations:$SUPPORT_VERSION"
    androidTestCompile "com.android.support.test.espresso:espresso-core:$ESPRESSO_VERSION"
    androidTestCompile "com.android.support.test.espresso:espresso-intents:$ESPRESSO_VERSION"
    /**
     * AccessibilityChecks
     * CountingIdlingResource
     * DrawerActions
     * DrawerMatchers
     * PickerActions (Time and Date picker)
     * RecyclerViewActions
     */
    androidTestCompile("com.android.support.test.espresso:espresso-contrib:$ESPRESSO_VERSION") {
        exclude group: 'com.android.support', module: 'appcompat'
        exclude group: 'com.android.support', module: 'support-v4'
        exclude group: 'com.android.support', module: 'support-v7'
        exclude group: 'com.android.support', module: 'design'
        exclude module: 'support-annotations'
        exclude module: 'recyclerview-v7'
    }
    compile "junit:junit:${JUNIT_VERSION}"
}

尝试排除与我已经完成的相同的组模块和组。

检查:https://github.com/piotrek1543/LocalWeather/blob/master/app/build.gradle

希望对你有帮助

关于android - 仪器测试 - setContentView() 上的空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38706736/

相关文章:

ruby-on-rails - 如何以最小的数据库开销在 Rails 中测试关联扩展逻辑

java - 列表上的空对象引用

android - Android 是否有任何 API 可以提供日期时间作为用户输入(startActivityForResult)?

java - 将字符串设置为 long[] 以实现振动功能

java - Commercetools Sphereio SphereClient 为空

java - 获取意外的 JDWP 错误 : 103 while trying to upload an image using retrofit to an api server android?

testing - 用于虚拟化开发环境的软件

PHP单元测试来自不同类的外部静态方法调用

java - 无害行中的 NullPointerException

java - 在 jar 中使用 getClass 返回空点异常