在我的应用程序中,当用户点击"注册"按钮,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)
检查活动是否完成。
请注意:我 NOT 想要创建模拟意图,我想检查意图结果状态。
答案 0 :(得分:8)
所有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);
}
答案 1 :(得分:3)
您只需使用ActivityTestRule
并获取活动结果,如下所示:
assertThat(rule.getActivityResult(), hasResultCode(Activity.RESULT_OK));
assertThat(rule.getActivityResult(), hasResultData(IntentMatchers.hasExtraWithKey(PickActivity.EXTRA_PICKED_NUMBER)));
完整示例here。
答案 2 :(得分:0)
不确定我是否正确理解了这个问题。但是,在关闭活动时,如果主应用程序仍处于打开状态,您可以检查活动结果。您需要在应用程序代码中公开结果状态,并且必须编写视图匹配器以验证它是否与预期的匹配。