Android系统。 Espresso:android.content.res.Resources $ NotFoundException:字符串资源ID

时间:2018-04-11 08:37:29

标签: android-espresso

Android Studio 3.1。 ,Java 1.8。 ,Gradle 4.4。

这是我的Espresso测试:

@RunWith(AndroidJUnit4.class)
public class SignInActivityTest {
    private Context context;

    @Rule
    public ActivityTestRule<SignInActivity> mActivityRule = new ActivityTestRule<>(SignInActivity.class, true, false);
    private MockWebServer server;

    @Before
    public void init() throws IOException {
        context = getInstrumentation().getContext();
        Intent intent = new Intent();
        mActivityRule.launchActivity(intent);    
    }

    @Test
    public void loginTextViewText() {
        String loginString = context.getResources().getString(R.string.login).toUpperCase();
        onView(withId(R.id.loginTextView)).check(matches(withText(loginString)));
    }


}

但是当我尝试开始测试loginTextViewText()时,我收到错误:

  

android.content.res.Resources $ NotFoundException:字符串资源ID

     

0x7f0e004f

     

在android.content.res.Resources.getText(Resources.java:312)   在android.content.res.Resources.getString(Resources.java:400)   at com.myproject.android.activity.SignInActivityTest.loginTextViewText(SignInActivityTest.java:106)       at java.lang.reflect.Method.invoke(Native Method)       在org.junit.runners.model.FrameworkMethod $ 1.runReflectiveCall(FrameworkMethod.java:50)       在org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)

我如何解决这个问题? 感谢。

2 个答案:

答案 0 :(得分:2)

对我有用的是使用ActivityTestRule中的活动作为获取字符串的上下文。在您的示例中为:

String loginString = mActivityRule.getActivity().getResources().getString(R.string.login).toUpperCase();

答案 1 :(得分:0)

如果有人仍然在努力挣扎,我可以使用targetContext修复它:

context = InstrumentationRegistry.getInstrumentation().targetContext

由于某种原因,有时activityRule.activity为空。