Как бы вы протестировали приложение для Android, которое должно перейти в спящий режим, выйти и записать результаты? - PullRequest
0 голосов
/ 14 января 2012

Я знаю, что это кажется странным вопросом, но мне нужно:

  1. получить информацию перед сном
  2. спать
  3. выполнять задачи
  4. Проснись
  5. получи результаты утверждения

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

Спасибо, Келли

Ответы [ 2 ]

0 голосов
/ 15 января 2012

Ах, ха!

ОК, по крайней мере, для изучения состояния экрана. Вы хотите сделать следующее:

В эмуляторе перейдите в раздел «Настройки \ Приложения \ Разработка» и снимите флажок «Пробудиться»

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

Теперь запустите свой тест на пробуждение от блокировки.

Для меня я сделал следующее (который использует roboguice 1.1.2)

@MediumTest
public void test_And_Screen_Is_In_Sleep_It_Should_Not_Make_Screen_Bright() throws Exception
{
    //currently test hates this even after I have assigned it the proper rights
    //to quote Ted Striker: What a pisser! :)
    //_power.get().goToSleep(0);

    boolean screenOn = _power.get().isScreenOn();

    assertFalse(screenOn);

    if (!screenOn)
    {
        _wake.get();

        boolean screenOn1 = _power.get().isScreenOn();

        assertFalse(screenOn1);
    }

    if (_wake != null)
    {
        _wake.release();
    }
}

У меня есть интерфейс под названием IWake, например:

public interface IWake
{
    void get();

    void release();
}

В реализации для IWake я просто настроил класс для выполнения всей тяжелой работы по приобретению (get ()) и выпуску (который также является release ())

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

Сделай это!

В моем методе тестирования я сделал это для настройки:

@Override
public void setUp() throws Exception
{
    super.setUp();

    _pwr = (PowerManager) getInstrumentation().getContext().getSystemService(Context.POWER_SERVICE);

    //setup timeout which is part of: android.provider.Settings.System
    System.putInt(getInstrumentation().getContext().getContentResolver(), System.SCREEN_OFF_TIMEOUT, 0);
}

В принципе я решил изменить время ожидания на 0 в настройках. Поскольку это происходит, оно мгновенно блокируется. Как чертовски круто это? :) В любом случае, я надеюсь, что это помогает другим

Ура, Келли

0 голосов
/ 14 января 2012

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

http://developer.android.com/reference/android/os/PowerManager.WakeLock.html

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

...