Android仪器化测试:未注册仪器化错误

5
我正在尝试使用Espresso编写Android插桩测试。当我运行测试时,会出现以下错误:

java.lang.IllegalStateException: No instrumentation registered! Must run under a registering instrumentation.

我不明白这个错误的含义。
我在我的测试中做了什么,我将简要解释一下。我遵循了Google提供的示例EspressoTesting教程
@SmallTest
@RunWith(AndroidJUnit4.class)
public class ActivityInputTest {

   @Rule
   public ActivityTestRule<ActivityInput> aiRule = new ActivityTestRule<>(ActivityInput.class);


   @Before
   public void setUp(){}
}

当我运行测试时,错误发生在注释 @Rule 处。我能否得到一些解释,为什么会出现这种情况,或者这背后的问题是什么?我不是对工作代码感兴趣,而是更关心问题背后的实际原因。
2个回答

10

我也遇到了与你完全相同的错误,因为我使用了androidx库。 我建议你检查build.gradle中的库,并像下面这些代码块一样更改UI测试的依赖项:

我也遇到了和你一模一样的错误,是因为我使用了androidx库。建议你检查build.gradle中的库,修改UI测试的依赖项,就像以下代码块一样:

androidTestImplementation "com.android.support.test:runner:1.0.2"
androidTestImplementation "com.android.support.test:rules:1.0.2"
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

请选择其中一个,使用com.android.support.testandroidx库,因为如果同时使用它们,它们会相互冲突。希望这可以帮助您解决错误No instrumentation registered! Must run under a registering instrumentation.


2
这不是一个解决方案。它只是通过移除实际引发此异常的“Androidx”测试编排来消除异常。我需要使用测试编排器来进行我的Espresso测试,不能使用常规的“com.android.support.test:runner:1.0.2”。 - user2453382
1
你需要将所有的库迁移到androidx,因为这两个库会相互冲突。如果你想在Androidx中使用库,请选择其中一个,并将com.android.support.test:runner转换为androidx.test:runner:1.1.0。请查看完整文档:https://developer.android.com/training/testing/set-up-project - nsaudria

0

我改变了从哪里检索上下文的方式:

import androidx.test.core.app.ApplicationProvider;

@Before
public void setUp() {
    context = ApplicationProvider.getApplicationContext();
}

回到被弃用的方式:

import org.robolectric.RuntimeEnvironment;

@Before
public void setUp() {
    context = RuntimeEnvironment.application;
}

问题已经为我解决。


RuntimeEnvironment在哪里?我需要添加哪个gradle依赖项?我需要从哪个包中导入它? - Code-Apprentice
org.robolectric.RuntimeEnvironment from implementation group: 'org.robolectric', name: 'robolectric', version: robolectric_version - Louis
请编辑您的问题,以包含这些细节,以便未来的访问者。 - Code-Apprentice

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接