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