You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio3.1下Espresso测试报Resources$NotFoundException错误求助

解决Espresso测试中的Resources$NotFoundException问题

嘿,我帮你分析下这个问题——你遇到的Resources$NotFoundException十有八九是测试代码里用错了Context导致的,结合你给出的测试片段来看,这里确实踩了个Espresso测试的常见坑:

问题根源

你在@Before方法里用getInstrumentation().getContext()获取的Context,属于测试包(通常是你的应用包名加上.test后缀),而非你的应用程序本身的Context。当你用这个测试包的Context去访问应用内的字符串资源时,自然找不到对应的资源ID,就会抛出这个异常。

解决方案

1. 替换为Activity的Context

直接通过ActivityTestRule获取启动的Activity的Context,这个Context属于你的应用程序包,能正常访问所有应用资源:

@Before
public void init() throws IOException {
    // 改用Activity的Context,而非Instrumentation的Context
    context = mActivityRule.getActivity();
    Intent intent = new Intent();
    mActivityRule.launchActivity(intent);
}

2. 检查资源访问方式

另外要确保测试代码(或被测代码)里没有直接把资源ID传给需要字符串的方法:

  • 错误写法:textView.setText(R.string.sign_in_hint);
  • 正确写法:textView.setText(context.getString(R.string.sign_in_hint));

如果被测代码里有这种直接传资源ID的情况,当Context归属错误时也会触发同样的异常。

3. 调试验证(可选)

你可以加一行日志确认Context的归属,排查问题:

Log.d("EspressoTest", "当前Context包名: " + context.getPackageName());

如果输出是你的应用包名(比如com.your.app),说明Context正确;如果是com.your.app.test,那说明还是用了测试包的Context。

按照上面的步骤调整后,应该就能解决这个资源找不到的问题了。

内容的提问来源于stack exchange,提问作者Alexei

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:35:15