您好,感谢您抽出宝贵时间阅读此问题。
我正在尝试为活动编写一个检测测试。方案如下:
如果在创建活动时未启用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方法。
如果有任何其他必要信息,我会尽力提供给您。
谢谢。
答案 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);