我有一个位于 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/