onCreate () в ActivityInstrumentationTestCase2 не вызывается, когда телефон заблокирован / находится в спящем режиме - PullRequest
2 голосов
/ 01 сентября 2011

Я пишу тест, используя ActivityInstrumentationTestCase2.

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

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

Вот пример теста

public void testSplashscreenRedirectsSomewhereAfterTimeout() throws Exception {

    Instrumentation.ActivityMonitor monitor = getInstrumentation().addMonitor(SomeActivity.class.getName(), null, false);

    getActivity(); // to make sure that the activity gets launched
    Activity activity = monitor.waitForActivityWithTimeout(10000); // waiting for the other activity
    assertNotNull("BaselineActivity was not called", activity);
}

когда телефон заблокирован, getActivity () возвращает правильное действие, но его метод onCreate () никогда не вызывается.

Есть ли способ заставить тесты работать, даже если экран заблокирован?

1 Ответ

0 голосов
/ 26 сентября 2011

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

Как узнать, разблокирован ли ваш экран .Если нет, то разблокируйте его и запустите свои тесты.

KeyguardManager keyguardManager = (KeyguardManager)getSystemService(Activity.KEYGUARD_SERVICE); 
KeyguardLock lock = keyguardManager.newKeyguardLock(KEYGUARD_SERVICE);
lock.disableKeyguard();

Обновление

Используйте следующую команду, чтобы снять блокировку Key Guard Lock

//Get the current window 
Window window = getWindow();  
//Add the Flag from the window manager class
window.addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
...