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
相关产品推荐
相关产品推荐

