android – Espresso:如何使用结果RESULT_OK测试活动结束

在我的应用程序中,当用户单击“注册”按钮时,将启动Registeractivity.用户填写表单后,详细信息将发布到Web服务,如果注册成功,则Registeractivity将使用RESULT_OK进行填充.这在以下代码示例中进行了总结:
public void submitRegistration() {

    showProgressDialog(R.string.registration,R.string.please_wait);  

    getWebApi().register(buildregistrationFromUI(),new Callback<ApiResponse>() {
        @Override
        public void success(ApiResponse apiResponse,Response response) {

            hideProgressDialog();

            setResult(RESULT_OK);
            finish();
        }

        @Override
        public void failure(RetrofitError error) {

            hideProgressDialog();
            showErrorDialog(ApiError.parse(error));
        }
    });
}

使用Espresso,如何使用setResult(RESULT_OK)检查活动是否已完成.

请注意:我不想创建模拟意图,我想检查意图结果状态.

解决方法

所有setResult(…)方法都是更改Activity类中字段的值
public final void setResult(int resultCode,Intent data) {
    synchronized (this) {
        mResultCode = resultCode;
        mResultData = data;
    }
}

因此,我们可以使用Java Reflection访问mResultCode字段以测试该值是否确实已设置为RESULT_OK.

@Rule
public ActivityTestRule<ContactsActivity> mActivityRule = new ActivityTestRule<>(
        ContactsActivity.class);


@Test
public void testResultOk() throws NoSuchFieldException,illegalaccessexception {
    Field f = Activity.class.getDeclaredField("mResultCode"); //NoSuchFieldException
    f.setAccessible(true);
    int mResultCode = f.getInt(mActivityRule.getActivity());

    assertTrue("The result code is not ok. ",mResultCode == Activity.RESULT_OK);
}

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...