Диалоговое окно тестирования в Android ActivityUnitTestCase
Я пытаюсь протестировать Activity в android, который покажет ProgressDialog, и все работает отлично в приложении, однако, когда я пытаюсь использовать ActivityUnitTestCase, и тест заставляет Activity показывать диалоговое окно с ошибкой:
android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
at android.view.ViewRoot.setView(ViewRoot.java:429)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:178)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
at android.view.Window$LocalWindowManager.addView(Window.java:392)
Я рассматривал проблему, и кажется, что метод onCreateDialog моей активности падает, когда мы пытаемся создать его из теста, который, как я предполагаю, является другим контекстом, я получаю это, однако я удивляюсь, что любой из вас был успешный при попытке такого сценария.
Это код моего onCreateDialog.
public Dialog onCreateDialog(final int id)
{
Dialog dialog;
switch (id)
{
case PROGRESS_BAR:
loadingDialog = new ProgressDialog(this);
loadingDialog.setMessage("searching for product...");
loadingDialog.setIndeterminate(true);
dialog = loadingDialog;
break;
case INEXISTING_PRODUCT:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Product not found");
builder.setPositiveButton("OK", null);
dialog = builder.create();
break;
case UNAVAILABLE_SERVICE:
AlertDialog.Builder unavailableBuilder = new AlertDialog.Builder(this);
unavailableBuilder.setMessage("Service Unavailable");
unavailableBuilder.setPositiveButton("OK", null);
dialog = unavailableBuilder.create();
break;
default:
dialog = super.onCreateDialog(id);
}
return dialog;
}
Любые идеи?
Ответы
Ответ 1
Я нахожу способ сделать это, я считаю.
Проблема заключалась в том, что мне нужно было перейти от ActivityInstrumentationTestCase2, а также сделать это, чтобы избежать проблем с потоком GUI.
final Button uButton = (Button) activity.findViewById(R.id.btnSearchProduct);
activity.runOnUiThread(new Runnable()
{
public void run()
{
uButton.performClick();
}
});
Мой вопрос только в том, как проверить результаты, так как мне нужно проверить, в какой активности я приземлился, и что он добавляет?