手机锁定/休眠时,未调用ActivityInstrumentationTestCase2中的onCreate()

时间:2011-08-31 21:51:15

标签: android testing android-activity android-emulator

我正在使用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 :(得分:0)

假设您没有创建活动是正确的,为什么不使用KeyGuardManager解锁手机。除非在手机锁定和解锁时必须采取特定操作,或者您正在测试服务,我只需运行“准备测试环境”功能,检查屏幕是否已锁定,解锁它并运行测试。

How to tell if your screen is unlocked。如果没有,则解锁并运行测试。

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

更新

使用以下方法解除密钥保护锁

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