在AndroidTestCase中访问AlertDialog

时间:2010-02-21 17:39:06

标签: android unit-testing testing automated-tests instrumentation

我正在使用 ActivityInstrumentationTestCase2 在我的GUI上进行自动黑盒测试。有没有办法点击对话框,或者在单元测试中获取属于Dialog的视图?

我能想出的唯一方法是保持对对话框的引用,让我的Activity实现一个getter方法让testcases访问对话框。有没有更好的方法不需要更改我的生产代码?

1 个答案:

答案 0 :(得分:4)

是的,有一种更好的方法可以将AlertDialog暴露给您的自动化代码,但您必须在生产代码中执行此操作。这将是值得的,因为它会让你的生活更轻松。让我解释。

您可以将AlertDialogs分配给WeakHashMap对象并轻松检索它们。这是如何 -

//Definition for WeakHashMap Object
WeakHashMap< Integer, Dialog > managedDialogs = new WeakHashMap< Integer, Dialog  >();

//Some alertdialog builder that needs to be exposed
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(YourActivity.this);
switch(id)
    {
case DIALOG:
    alertDialogBuilder.setTitle("some title")
    .setMessage("some message")
    .setPositiveButton("button text", Onclick activity)         
    .setNeutralButton("button text", Onclick activity)          
    .setNegativeButton("button text", Onclick activity)         
.setCancelable(true);

    AlertDialog dialog = alertDialogBuilder.create();

    //Assigning the value of this dialog to the Managed WeakHashMap
    managedDialogs.put(DIALOG, dialog);
    return dialog;
    }

现在,在您的测试框架中,当您希望显示对话框时,只需执行 -

AlertDialog dialog = (AlertDialog) activity.managedDialogs.get(YourActivity.DIALOG);