android– 如何为AlertDialog进行Robolectric测试

android– 如何为AlertDialog进行Robolectric测试,第1张

概述我是robolectric的新手,我正在尝试对创建AlertDialog的按钮进行测试.单击该按钮时,将使用正面按钮创建一个AlertDialog,我想使用Robolectric单击该按钮,并测试它是否启动了一个活动.这是按钮的代码:newUserButton.setOnClickListener(newView.OnClickListener(){@Overr

我是robolectric的新手,我正在尝试对创建AlertDialog的按钮进行测试.单击该按钮时,将使用正面按钮创建一个AlertDialog,我想使用Robolectric单击该按钮,并测试它是否启动了一个活动.这是按钮的代码:

newUserbutton.setonClickListener(new VIEw.OnClickListener() {        @OverrIDe        public voID onClick(VIEw v) {            AlertDialog.Builder builder = new AlertDialog.Builder(StartActivity.this);            builder.setTitle(context.getResources().getString(R.string.start_Title_message))                    .setMessage(getResources().getString(R.string.start_dialog_message));            builder.setPositivebutton(getString(R.string.start_confirm_message), new DialogInterface.OnClickListener() {                public voID onClick(DialogInterface dialog, int ID) {                    startActivityForResult(new Intent(StartActivity.this, AvatarRoomActivity.class), 0);                }            });            builder.setNegativebutton("Cancel", new DialogInterface.OnClickListener() {                public voID onClick(DialogInterface dialog, int ID) {                    dialog.dismiss();                }            });            AlertDialog dialog = builder.create();            colorDrawable drawable = new colorDrawable(color.WHITE);            drawable.setAlpha(200);            dialog.getwindow().setBackgroundDrawable(drawable);            dialog.show();        }    });

有谁知道如何测试点击肯定按钮,然后启动AvatarRoomActivity?提前致谢,希望很快能收到某人的来信.

解决方法:

让我们暂时忘记newUserbutton.它与问题无关.

您需要公开AlertDialog对象,以便可以在单元测试代码中访问它.所以我假设你的活动在StartActivity中有这样的方法:

AlertDialog showDialog() {    AlertDialog.Builder builder = new AlertDialog.Builder(StartActivity.this);    builder.setTitle("This is Title")            .setMessage("Dialog Message");    builder.setPositivebutton("Confirm", new DialogInterface.OnClickListener() {        public voID onClick(DialogInterface dialog, int ID) {            startActivityForResult(new Intent(this, AvatarRoomActivity.class), 0);        }    });    builder.setNegativebutton("Cancel", new DialogInterface.OnClickListener() {        public voID onClick(DialogInterface dialog, int ID) {            dialog.dismiss();        }    });    AlertDialog dialog = builder.create();    dialog.show();    return dialog;}

然后newUserbutton的click事件只是调用此方法.

然后我们有这样的测试用例:

@Testpublic voID testLaunchAvatarRoomWhenConfirm() {    StartActivity startActivity = Robolectric.buildActivity(StartActivity.class).create().get();    AlertDialog dialog = startActivity.showDialog();    // Key part 1 : simulate button click in unit test    button confirm = dialog.getbutton(Dialog.button_POSITIVE);    confirm.performClick();    // Key part 2 : Check that startActivityForResult is invoke    ShadowActivity shadowActivity = shadowOf(startActivity);    ShadowActivity.IntentForResult intentForResult = shadowActivity.getNextStartedActivityForResult();    // assert that the proper request to start activity is sent    Componentname nextActivity = intentForResult.intent.getComponent();    assertEquals(".AvatarRoomActivity", nextActivity.getShortClassname());}

此测试方法验证当单击对话框的正按钮时,将使用适当的活动类名调用startActivityForResult.

所以剩下的问题是我们如何确保活动真正得到解决和启动.通常我会在此时停止测试警报对话框 *** 作.是否可以解决意图并启动活动属性超出了此特定测试用例的范围.

总结

以上是内存溢出为你收集整理的android – 如何为AlertDialog进行Robolectric测试全部内容,希望文章能够帮你解决android – 如何为AlertDialog进行Robolectric测试所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1111420.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存