Android 浓缩咖啡:我怎样才能测试活动是否在结果正常的情况下完成
在我的应用程序中,当用户单击中的“注册”按钮时,RegisterActivity启动。用户填写表单后,详细信息将发布到web服务,如果注册成功,RegisterActivity将显示Android 浓缩咖啡:我怎样才能测试活动是否在结果正常的情况下完成,android,android-intent,android-espresso,Android,Android Intent,Android Espresso,在我的应用程序中,当用户单击中的“注册”按钮时,RegisterActivity启动。用户填写表单后,详细信息将发布到web服务,如果注册成功,RegisterActivity将显示RESULT\u OK。下面的代码示例对此进行了总结: public void submitRegistration() { showProgressDialog(R.string.registration, R.string.please_wait); getWebApi().registe
RESULT\u 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));
}
});
}
公共作废提交注册(){
showProgressDialog(R.string.registration,R.string.please_wait);
getWebApi().register(buildRegistrationFromUI(),new Callback()){
@凌驾
公共无效成功(ApiResponse ApiResponse,Response Response){
hideProgressDialog();
设置结果(结果\正常);
完成();
}
@凌驾
公共无效失败(错误){
hideProgressDialog();
对话框(apierro.parse(error));
}
});
}
使用浓缩咖啡,我如何检查活动是否以setResult(RESULT\u OK)
完成
请注意:我不想创建模拟意图,我想检查意图结果状态。setResult(…)方法所做的只是更改活动类中字段的值
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);
}
@规则
公共活动测试规则mActivityRule=新活动测试规则(
接触活动(类别);
@试验
public void testResultOk()抛出NoSuchFieldException、IllegalAccessException{
字段f=Activity.class.getDeclaredField(“mResultCode”);//NoSuchFieldException
f、 setAccessible(true);
int mResultCode=f.getInt(mActivityRule.getActivity());
assertTrue(“结果代码不正常。”,mResultCode==Activity.result\u ok);
}
不确定我是否正确理解了这个问题。但是,在关闭活动时,如果主应用程序仍处于打开状态,则可以检查活动结果。您需要在应用程序代码中公开结果状态,并且必须编写视图匹配器以验证其是否与预期匹配。您只需使用活动测试规则
即可获得如下活动结果:
assertThat(rule.getActivityResult(), hasResultCode(Activity.RESULT_OK));
assertThat(rule.getActivityResult(), hasResultData(IntentMatchers.hasExtraWithKey(PickActivity.EXTRA_PICKED_NUMBER)));
完整示例可用。,使用反射从活动中获取值。