猿问

java.lang.IllegalStateException:未注册检测!必须在注册仪器下运行

我一直在尝试使用 Espresso 执行一个简单的 UI 测试,但我所有的测试都失败了,但出现了相同的异常:


java.lang.IllegalStateException:未注册检测!必须在注册仪器下运行


这是在使用一个esspresso新手引导在这里。我已经找到了类似的问题,但与我最相关的问题在这里没有得到解答- 我认为这是因为他们没有描绘出整个画面,所以这是我的代码。我将只展示一个测试,因为它们都以完全相同的错误失败:


build.gradle(模块:app)


apply plugin: 'com.android.application'


android {

    compileSdkVersion 27

    defaultConfig {

        applicationId "io.github.vinge1718.myrestaurants"

        minSdkVersion 15

        targetSdkVersion 27

        versionCode 1

        versionName "1.0"

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

        //testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"

    }

    buildTypes {

        release {

            minifyEnabled false

            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

        }

    }

    testOptions {

        unitTests {

            includeAndroidResources = true

        }

    }

}


dependencies {

    testImplementation "org.robolectric:robolectric:3.8"

    implementation fileTree(dir: 'libs', include: ['*.jar'])

    implementation 'com.android.support:appcompat-v7:27.1.1'

    implementation 'com.android.support.constraint:constraint-layout:1.1.3'

    testImplementation 'junit:junit:4.12'

    androidTestImplementation 'com.android.support.test:runner:1.0.2'

    androidTestImplementation('com.android.support.test.espresso:espresso-core:3.0.2', {

        exclude group: 'com.android.support', module: 'support-annotations'

    })


    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0'

    androidTestImplementation 'androidx.test:runner:1.1.0'

    androidTestImplementation 'androidx.test:rules:1.1.0'

    androidTestImplementation 'org.hamcrest:hamcrest-library:1.3'

}

build.gradle(项目:MyRestaurant)

更正这里是两个测试。我不认为错误与测试本身有任何关系,而是与配置有关 - 不过我已经纠正了


慕村225694
浏览 233回答 3
3回答

白猪掌柜的

我认为这是因为库androidx与com.android.support.test. 如果你想使用 jetpack,你必须将所有的测试库转换为 androidx,如果你不想那样,只需删除你的androidx库并使用所有com.android.support.test. 查看我在Android Instrumentation Testing 中的最新答案: No instrumentation Registration Error。希望这对你有帮助。

慕村9548890

我有同样的问题,并测试其在类的健身方法,这些标准单元之间存在差异的测试中去app/src/test/java/<package>。与按钮交互、编辑文本等的UI测试需要 expresso 并进入app/src/androidTest/java/<package>。我花了好几遍阅读文档,浪费了一天时间才弄明白其中的区别。|____app&nbsp; |&nbsp; | ____src&nbsp;&nbsp; |&nbsp; &nbsp;|____androidTest&nbsp; |&nbsp; &nbsp;|&nbsp; |____java&nbsp; |&nbsp; &nbsp;|&nbsp; &nbsp; &nbsp;|____<package>&nbsp; |&nbsp; &nbsp;|&nbsp; &nbsp; &nbsp; &nbsp; |____ MainActivityInstrumentationTest.java&nbsp; # expresso here&nbsp;&nbsp; |&nbsp; &nbsp;|____test&nbsp; |&nbsp; &nbsp; &nbsp; |____java&nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|____<package>&nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |____ MainActivityInstrumentationTest.java&nbsp; # not here

波斯汪

对我有用的是完全变回安卓X到com.android.supportbuild.gradle 中的库请注意:您可能需要重新导入类中的库,例如import androidx.test.runner.AndroidJUnitRunner;到import android.support.test.runner.AndroidJUnitRunner;还要确保在每次从 build.gradle 添加或删除库后始终清理和重建项目。
随时随地看视频慕课网APP

相关分类

Java
我要回答