4

我正在尝试使用 Espresso 编写 Android Instrumented 测试。当我运行测试时出现此错误

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

我不明白这个错误是什么意思。

我将简要解释我在测试中所做的事情。我按照google 和EspressoTesting Tutorial给出的示例

@SmallTest
@RunWith(AndroidJUnit4.class)
public class ActivityInputTest {

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


   @Before
   public void setUp(){}
}

当我运行测试时,错误发生在 annotation @Rule。我能否解释一下为什么会发生这种情况或这背后的问题是什么?我对工作代码不感兴趣,但对问题背后的实际问题更感兴趣。

4

2 回答 2

11

我也遇到了与您完全相同的错误,因为我使用了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'

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

于 2018-11-16T15:37:09.183 回答
0

更改我从以下位置检索上下文的方式:

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

到不推荐使用的方式:

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

为我解决了这个问题。

于 2020-03-03T09:20:59.327 回答