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