Android测试在活动中显示alertDialog

时间:2014-06-09 23:15:56

标签: android android-activity alertdialog android-testing

您好,感谢您抽出宝贵时间阅读此问题。

我正在尝试为活动编写一个检测测试。方案如下:

如果在创建活动时未启用GPS,则应向用户显示alertDialog以建议打开传感器。检查由实用程序类执行,该实用程序类检查连接并在必要时显示alertDialog。如果对话框显示给用户,我希望能够在我的课程中进行测试。

现在有些代码:

活动:

@Override
protected void onCreate(Bundle savedInstanceState) {        
    ...     
    Utils.checkGPSProvider(this);       
}

Utility类:

public final class Utils {


private Utils() {

}

private static void createAlertDialog(final Context context, final String message, final String intentAction) {
    final AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context);
    final Intent callSettingIntent = new Intent(intentAction);

    alertDialogBuilder.setMessage(message).setPositiveButton(POSITIVE_BUTTON,
            new DialogInterface.OnClickListener() {

                @Override
                public void onClick(final DialogInterface dialog, final int id) {
                    context.startActivity(callSettingIntent);
                }
            });

    alertDialogBuilder.setNegativeButton(NEGATIVE_BUTTON, new DialogInterface.OnClickListener() {

        @Override
        public void onClick(final DialogInterface dialog, final int id) {
            dialog.cancel();
        }
    });
    final AlertDialog alert = alertDialogBuilder.create();
    alert.show();
}

public static void checkGPSProvider(final Context context) {
    String message;

    message = "GPS message";

    final LocationManager mlocManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);

    if (!mlocManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {

        createAlertDialog(context, message, android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);
    }
}

}

测试类:

public class UtilsTest extends ActivityInstrumentationTestCase2<MyActivity> {

private MyActivity activity;

@Mock
LocationManager mlocManager;

public UtilsTest() {
    super(MyActivity.class);
}

public UtilsTest(Class<MyActivity> activityClass) {
    super(activityClass);
}

@Override
public void setUp() throws Exception {
    super.setUp();

    activity = getActivity();

    MockitoAnnotations.initMocks(this);
}

public void testWhenGPSIsDisabled_ShouldShowAlertDialog() {
    when(mlocManager.isProviderEnabled(LocationManager.GPS_PROVIDER)).thenReturn(false);

    if (mlocManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
        Assert.fail("GPS should be disabled");
    }

(insert code here that should test that the alertDialog is shown)
}
}

我知道Dialog类有一个isShown()方法,但我不知道如何获取对话框引用来测试isShown方法。

如果有任何其他必要信息,我会尽力提供给您。

谢谢。

1 个答案:

答案 0 :(得分:1)

您可以从方法AlertDialog

返回createAlertDialog的引用

示例:

private static AlertDialog createAlertDialog(final Context context, final String message, final String intentAction)

当你调用这个方法时,你可以得到方法的返回参考值,因为你的checkGPSProvider也应该返回AlertDialog。

<强>样品:

    public static AlertDialog checkGPSProvider(final Context context) {
    String message;

    message = "GPS message";

    final LocationManager mlocManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);

    if (!mlocManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {

        return createAlertDialog(context, message, android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);
    }
}

在活动的oncreate方法中,为AlertDialog创建一个字段,并使用Utils.checkGPSProvider(this);

进行实例化

<强>溶液

 your_alert_dialog = Utils.checkGPSProvider(this);