Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/205.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 生成本地单元测试(未注册检测!必须在注册检测下运行)_Android_Unit Testing_Documentation_Robolectric - Fatal编程技术网

Android 生成本地单元测试(未注册检测!必须在注册检测下运行)

Android 生成本地单元测试(未注册检测!必须在注册检测下运行),android,unit-testing,documentation,robolectric,Android,Unit Testing,Documentation,Robolectric,看看这位官员。“包含框架依赖项”一节给出了如何设置本地单元测试以使用android sdk环境的示例。但是,如果您按照示例中的方式执行所有操作,则测试不会启动。我得到了一个错误 java.lang.IllegalStateException:未注册任何检测!必须 在注册仪器下运行 所有的尝试都是在一个新项目上进行的。Android Studio 3.3,gradle-4.10.1,构建:gradle:3.3.0,Kotlin,包括Androidx工件 然后将以下行添加到具有指定配置的项目中: b

看看这位官员。“包含框架依赖项”一节给出了如何设置本地单元测试以使用android sdk环境的示例。但是,如果您按照示例中的方式执行所有操作,则测试不会启动。我得到了一个错误

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

所有的尝试都是在一个新项目上进行的。Android Studio 3.3,gradle-4.10.1,构建:gradle:3.3.0,Kotlin,包括Androidx工件

然后将以下行添加到具有指定配置的项目中:

build.gradle

android {
    // ...
    testOptions {
        unitTests.includeAndroidResources = true
    }
}

dependencies {
    // ...
    // Already exist
    testImplementation 'junit:junit:4.12'
    // Added this line
    testImplementation 'androidx.test:core:1.0.0'
}
和测试主体本身:

package com.example.myapplication

import android.content.Context
import androidx.test.core.app.ApplicationProvider
import org.junit.Test

class ExampleUnitTest {

    val context = ApplicationProvider.getApplicationContext<Context>()

    @Test
    fun readStringFromContext_LocalizedString() {
        System.out.println(context.applicationInfo.packageName)
    }
}

更新

如果使用的是最新的gradle版本,则不应再遇到此错误


我想您需要在
build.gradle
中包含机器人依赖项,并为您的测试指定测试运行程序:

@RunWith(RobolectricTestRunner.class)
class ExampleUnitTest {

在那之后,它对我起了作用。我不知道为什么Android文档中没有包含此信息。

您的测试文件位于测试文件夹或androidTest文件夹中的何处?@Kaveri我需要本地单元测试,因此该文件位于测试目录中,但由于您在测试中使用了上下文,应该使用androidTest文件夹中的intrumentational单元测试。@Kaveri谢谢,但不需要,我需要不在android设备上运行的本地单元测试。如果您仔细阅读链接上的文档,您将了解这是通过Robolectric实现的。但由于某些原因,文档中提供的示例不起作用,我也不清楚原因。谢谢!最后,我就这么做了,我也不明白为什么文档中没有包含这一点。我同意。为什么这些信息没有写在文档中?……这不在文档中,因为Robolectric只需要作为Java和Android世界之间的桥梁,让您可以在“非仪器化”测试(可以说是纯Junit测试)中访问Android特定的类。如果您正在运行插入指令的测试(如Espresso测试),它们将可以访问框架的所有类,因此根本不需要Robolectric之类的库。@Jorge请参阅文档部分:
如果您的测试与多个Android框架依赖项交互,或以复杂的方式与这些依赖项交互,使用AndroidX测试提供的机器人分子工件
。但是testrunner注释丢失了,这很奇怪。在本例中,我们不是在讨论纯Junit测试。我们也不是在谈论仪器化测试。更新了我的答案,现在不再需要这个测试运行器注释
@RunWith(RobolectricTestRunner.class)
class ExampleUnitTest {