Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/183.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 浓缩咖啡:我怎样才能测试活动是否在结果正常的情况下完成_Android_Android Intent_Android Espresso - Fatal编程技术网

Android 浓缩咖啡:我怎样才能测试活动是否在结果正常的情况下完成

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

在我的应用程序中,当用户单击中的“注册”按钮时,RegisterActivity启动。用户填写表单后,详细信息将发布到web服务,如果注册成功,RegisterActivity将显示
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)));
完整示例可用。

,使用反射从活动中获取值。