Пример тестирования активности Android сбивает превзошедших ожиданий

StackOverflow https://stackoverflow.com/questions/3773577

Вопрос

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

Я очень запутался, почему человек, написанный тест, считает, что Спиннер был поврежден между оно () и Onreume (). Это потому, что Спиннер мог быть повторно использован в некоторой последующей деятельности и, таким образом, потерял свое государство? Это единственное разумное объяснение, о котором я могу думать.

Я обеспокоен сохранением мероприятий моего приложения, не являющихся виджетами, таких как строки, INTS и т. Д. Они инициализируются во время OnCreate и не будут изменены пользователем. В результате я не вижу никаких причин, чтобы сохранить их во время навязки, потому что даже если ОС непосредственно завершает активность после паузы, OnCreate () повторно инициализирует эти члены.

Тогда это безопасно, чтобы предположить, что эти члены без виджетов не будут причинить вред при паузе (предполагая, что приложение в конечном итоге возобновляется?)

 public void testStatePause() {
    Instrumentation mInstr = this.getInstrumentation();
    mActivity.setSpinnerPosition(TEST_STATE_PAUSE_POSITION);
    mActivity.setSpinnerSelection(TEST_STATE_PAUSE_SELECTION);
    mInstr.callActivityOnPause(mActivity);          
    mActivity.setSpinnerPosition(0);
    mActivity.setSpinnerSelection("");
    mInstr.callActivityOnResume(mActivity);
    int currentPosition = mActivity.getSpinnerPosition();
    String currentSelection = mActivity.getSpinnerSelection();
    assertEquals(TEST_STATE_PAUSE_POSITION,currentPosition);
    assertEquals(TEST_STATE_PAUSE_SELECTION,currentSelection);
 }          
Это было полезно?

Решение

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

  1. Oncreate - инициализировать до 5
  2. Пользователь выбирает 3
  3. Пользователь покидает деятельность, деятельность приостановлена
  4. Android удаляет активность B / C, нужны ресурсы
  5. Пользователь возвращает на деятельность
  6. Oncreate называется - инициализирован до 5
  7. onreсум называется - видит, что есть сохраненные данные, значение результатов до 3
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top