Espresso:如何测试 activity 以结果 RESULT_OK 结束
Espresso: How can I test that the activity finished with result RESULT_OK
在我的应用程序中,当用户单击 "Register" 中的按钮时,将启动 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)
。
请注意:我不想创建模拟意图,我想检查意图结果状态。
setResult(...) 方法所做的只是更改 Activity class
中字段的值
public final void setResult(int resultCode, Intent data) {
synchronized (this) {
mResultCode = resultCode;
mResultData = data;
}
}
所以我们可以使用Java反射来访问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);
}
不确定我是否理解正确。但是,在关闭 activity 时,如果主应用程序仍处于打开状态,您可以检查 activity 结果。您需要在应用程序代码中公开结果状态,并且必须编写视图匹配器来验证它是否与预期匹配。
您可以简单地使用 ActivityTestRule
并得到 Activity 这样的结果:
assertThat(rule.getActivityResult(), hasResultCode(Activity.RESULT_OK));
assertThat(rule.getActivityResult(), hasResultData(IntentMatchers.hasExtraWithKey(PickActivity.EXTRA_PICKED_NUMBER)));
完整示例可用 here。
在我的应用程序中,当用户单击 "Register" 中的按钮时,将启动 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)
。
请注意:我不想创建模拟意图,我想检查意图结果状态。
setResult(...) 方法所做的只是更改 Activity class
中字段的值 public final void setResult(int resultCode, Intent data) {
synchronized (this) {
mResultCode = resultCode;
mResultData = data;
}
}
所以我们可以使用Java反射来访问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);
}
不确定我是否理解正确。但是,在关闭 activity 时,如果主应用程序仍处于打开状态,您可以检查 activity 结果。您需要在应用程序代码中公开结果状态,并且必须编写视图匹配器来验证它是否与预期匹配。
您可以简单地使用 ActivityTestRule
并得到 Activity 这样的结果:
assertThat(rule.getActivityResult(), hasResultCode(Activity.RESULT_OK));
assertThat(rule.getActivityResult(), hasResultData(IntentMatchers.hasExtraWithKey(PickActivity.EXTRA_PICKED_NUMBER)));
完整示例可用 here。