Тестирование на Android: как проверить диалог отображается на экране? (с использованием ActivityInstrumentationTestCase2)
Я пытаюсь, наконец, добавить тесты пользовательского интерфейса в свое приложение для Android, чтобы увеличить охват (все мои другие слои прошли надлежащую проверку, поэтому все мои ошибки теперь появляются из пользовательского интерфейса...)
Я начал использовать ActivityInstrumentationTestCase2
в качестве базового класса для модульных тестов эмулятора, а простые вещи легко проверить и сработать.
Но теперь я пытаюсь проверить Диалог, как ожидалось, и я не знаю, как это сделать.
Мой тест:
public void testOpensAboutDialogWhenAboutButtonClicked() {
final MyActivity activity = getActivity();
final Instrumentation instrumentation = getInstrumentation();
final Button aboutButton = (Button) activity.findViewById(R.id.about);
TouchUtils.clickView(this, aboutButton);
// how to test for the AboutDialog?
}
Теперь мой диалог не имеет идентификатора, поэтому я не могу получить указатель на него с помощью findViewById.
Он создан с использованием доступных классов-конструкторов:
final AlertDialog about = new AlertDialog.Builder(parent)
.setTitle(parent.getString(R.string.about_title))
.setCancelable(true)
.setIcon(R.drawable.skull)
....
Любые идеи или указатели на учебные пособия?
EDIT: Чтобы ответить на комментарий Jens, я не, используя управляемые диалоги, просто создав AlertDialog и показывая его с помощью .show()
Ответы
Ответ 1
Поскольку вы уже используете ActivityInstrumentationTestCase2
, вы должны начать использовать Robotium - это упростит ваше тестирование много.
Для вашего дела это так же просто, как это (если вы знаете ожидаемое название или что-то еще неопределенное в своем диалоговом окне):
public void testSomeRandomSentence() {
Solo solo = new Solo(getInstrumentation(), getActivity());
getInstrumentation().waitForIdleSync();
// Now do whatever you need to do to trigger your dialog.
// Let assume a properly lame dialog title.
assertTrue("Could not find the dialog!", solo.searchText("My Dialog Title"));
}
Ответ 2
после присвоения id Toast в setUp()
toast = (Toast)activity.findViewById(..........);
создать тестовый файл()
{
ViewAsserts.assertOnScreen(toasts.getRootView(), toast.getRootView());
//pass if toast is visible on screen
}
Ответ 3
добавьте геттер в ваш диалог, например:
public AlertDialog get_aboutbox()
{
return this.about;
}
то вот решение для вашего теста:
public void testOpensAboutDialogWhenAboutButtonClicked() {
final MyActivity activity = getActivity();
assertNotNull("aboutbox is null",activity.get_aboutbox());
final Instrumentation instrumentation = getInstrumentation();
final Button aboutButton = (Button) activity.findViewById(R.id.about);
TouchUtils.clickView(this, aboutButton);
assertTrue("About Button didn't displayed the Dlg",
activity.get_aboutbox().isShowing());
}