ActivityInstrumentationTestCase2を使用して、GUI で自動化されたブラック ボックス テストを実行しています。ダイアログをクリックする方法、または単体テストでダイアログに属するビューを取得する方法はありますか?
私が思いついた唯一の方法は、ダイアログへの参照を保持し、Activity に getter メソッドを実装して、テストケースがダイアログにアクセスできるようにすることです。本番コードを変更する必要のない、より良い方法はありますか?
ActivityInstrumentationTestCase2を使用して、GUI で自動化されたブラック ボックス テストを実行しています。ダイアログをクリックする方法、または単体テストでダイアログに属するビューを取得する方法はありますか?
私が思いついた唯一の方法は、ダイアログへの参照を保持し、Activity に 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);