在我的应用程序中,当用户单击 中的“注册”按钮时,会启动 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,我如何检查 Activity 是否以 setResult(RESULT_OK) 完成。

请注意:我做 而不是 想要创建一个模拟 Intent ,我想检查 Intent 结果状态。

最佳答案

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 - 浓缩咖啡 : How can I test that the activity finished with result RESULT_OK,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33778708/

10-10 09:44