Запустите методы теста Espresso как шаги - PullRequest
0 голосов
/ 28 февраля 2019

Я пишу тестирование Android с помощью Espresso.Предполагается, что это будет автоматический тест для существующего контрольного примера, который состоит из нескольких этапов.Теперь мой метод тестирования выглядит следующим образом:

class TestCaseName {

    @Rule
    @JvmField
    val activityTestRule = ...

    @Test
    fun hugeUglyTest() {
      // step 1: ...
      /* performing some actions */

      // step 2: ...
      /* performing some actions */

      // step 3: ...
      /* performing some actions */

      // step 4: ...
      /* performing some actions */

      // step 5: ...
      /* performing some actions */

      // step 5: ...
      /* performing some actions */

      // and so on ....
    }
}

И есть две проблемы:

  • Это выглядит некрасиво
  • Это очень труднонайти шаг, вызвавший сбой

Я хотел разделить этот огромный метод тестирования на отдельные и выполнить каждый из них как шаг теста, например:

class TestCaseName {

    @Rule
    @JvmField
    val activityTestRule = ...

    @Test
    fun step_1_name() {
       /* performing some actions */
    }

    @Test
    fun step_2_name() {
       /* performing some actions */
    }
    // and so on
}

Я создал свой собственный JUnitRunner, который сортирует эти методы по номеру шага и сохраняет экземпляр теста.

Проблема в том, что я не могу заставить Espresso поддерживать приложение между вызовами методов.Он всегда закрывает запущенную активность, но мне нужно держать ее открытой, чтобы пройти следующие шаги из той же точки.Я пытался создать пользовательский ActivityTestRule, но безуспешно.

1 Ответ

0 голосов
/ 28 февраля 2019

Прежде всего, я чувствую вашу боль и думаю, что вы приняли правильное решение, разделив каждый шаг.Однако способ выполнения ваших тестов не совсем возможен.Фактически это противоречит логике автоматического тестирования пользовательского интерфейса. Espresso framework предназначен для имитации одного короткого взаимодействия с пользователем, а затем закрытия приложения с надлежащим результатом (успех или неудача).Посмотрев на ваш пример, я могу предложить вам другой способ реализации тестовых случаев.Хотя, возможно, это дублирование кода.

class TestCaseName {

    @Test
    fun test_action_1() {
       /* perform step 1 */
    }

    @Test
    fun test_action_2() {
       /* perform step 1 */
       /* perform step 2 */
    }

    @Test
    fun test_action_3() {
       /* perform step 1 */
       /* perform step 2 */
       /* perform step 3 */
    }
    // and so on
}

Если вы хотите следовать инструкциям во время выполнения тестов, вы можете просто использовать Thread.sleep(time_in_miliseconds) между шагами.Опять же, это не самые элегантные решения, но могут быть полезны в какой-то момент.

...