Диалоги условных предупреждений в тестах пользовательского интерфейса Android Studio - PullRequest
0 голосов
/ 27 мая 2020

Когда пользователь входит в мое приложение, появляется диалоговое окно с предупреждением, если это его первый раз. В противном случае он не отображается.

Это усложняет задачу, когда я пытаюсь написать тесты пользовательского интерфейса. Поскольку диалоговое окно предупреждения отображается условно, я не могу закрыть его, используя: onView(withId(android.R.id.button1)).perform(click()), как я видел, предложенный в других сообщениях.

Однако, если он появляется, и я не закрываю его в своем тесте, тест заблокирован от продолжения (так как он не распознает никаких других идентификаторов представлений) и не работает.

Есть ли у кого-нибудь рекомендации, как я могу с этим справиться?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 28 мая 2020

Однако, если он появляется, и я не закрываю его в рамках своего теста, тест блокируется от продолжения (поскольку он не распознает никаких других идентификаторов представлений) и завершается ошибкой.

Есть у кого-нибудь есть рекомендации о том, как я могу с этим справиться?

Каждый раз, когда вы пишете тест, вы должны убедиться, что соблюдены необходимые условия для надежного и последовательного выполнения рассматриваемого теста. Это часть «упорядочить» идиомы Arrange, Act, Assert .

Следовательно, если вы тестируете поток, который включает диалог, вы должны организовать тест для настройки условие, при котором отображается это диалоговое окно.

Если вы тестируете поток, в котором не диалоговое окно, вы должны настроить тест, чтобы установить условие, при котором диалоговое окно не show.

Вы не разместили код, поэтому я понятия не имею, что такое «условие» для отображения диалогового окна, но в основном вам нужно сделать что-то в своем тесте, чтобы гарантировать, что условие ложно, если вы этого не сделаете хотите диалог или правда, если хотите. Может быть, это установка общих предпочтений?

Так, например, ваш тест может выглядеть примерно так:

@Test
fun myAwesomeTest() {
    // Arrange - do something to ensure dialog does not show
    SomeHelperClass.setConditionToShowDialog(false)

    // Act - do actions knowing the dialog will not show
    onView(withId(R.id.awesomeId)).perform(click())

    // Assert
    onView(withId(R.id.duperId)).check(matches(isVisible()))
}

Опять же, без специфики вашего кода, трудно дать более подробную информацию, но Надеюсь, этого достаточно, чтобы вы начали.

Надеюсь, это поможет!

0 голосов
/ 27 мая 2020

Похоже (но я должен предположить, что, поскольку вы не предоставили более подробную информацию об этом), вы управляете показом этого диалогового окна «в первый раз» на основе значения, которое вы храните локально, возможно, с помощью PersistentState .

Если это так, вы можете контролировать это значение непосредственно из ваших тестов Espresso и тем самым сделать состояние ваших тестов таким, как ожидалось.

Кроме того, просто примечание - я настоятельно рекомендовал бы не иметь зависимые тесты эспрессо, которые, похоже, есть у вас, на основе «, если он появляется, и я не закрываю его в моем тесте, тест заблокирован для перехода на ».

Ваши тесты должны быть выполнены в случайном порядке и пройдены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...