在AndroidTestCase中访问AlertDialog

在AndroidTestCase中访问AlertDialog,android,unit-testing,testing,automated-tests,instrumentation,Android,Unit Testing,Testing,Automated Tests,Instrumentation,我正在使用ActivityInstrumentationTestCase2在GUI上进行自动黑盒测试。有没有办法单击对话框,或者在单元测试中获取属于该对话框的视图 我能想到的唯一方法是保留对该对话框的引用,并让我的活动实现一个getter方法,让测试用例访问该对话框。是否有更好的方法不需要更改我的生产代码?是的,有更好的方法向您的自动化代码公开AlertDialogs,但您必须在生产代码中这样做。尽管这样做是值得的,因为这会让你的生活轻松很多。让我解释一下 您可以将AlertDialogs分配给

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


我能想到的唯一方法是保留对该对话框的引用,并让我的活动实现一个getter方法,让测试用例访问该对话框。是否有更好的方法不需要更改我的生产代码?

是的,有更好的方法向您的自动化代码公开AlertDialogs,但您必须在生产代码中这样做。尽管这样做是值得的,因为这会让你的生活轻松很多。让我解释一下

您可以将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);