2013-02-19 4 views
1

im, написав простой модульный тест в Junit, пытаясь проверить, соответствуют ли мои намерения моим 2 пунктам меню переполнения панели действий правильной деятельностью. Im имея вопрос с моим испытанием возвращается вЭлементы меню тестирования устройства в переполнении панели действий

junit.framework.AssertionFailedError: expected:<true> but was:<false> (**FIXED**) 

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

Любая помощь, примеры и комментарии приветствуются.

public void testThatMenuWillOpenSettings() { 
    // Will be sending Key Event to open Menu then select something 
    ActivityMonitor am = getInstrumentation().addMonitor(
      Settings.class.getName(), null, false); 

    // Click the menu option 
    getInstrumentation().sendKeyDownUpSync(KeyEvent.KEYCODE_MENU); 
    getInstrumentation().invokeMenuActionSync(mActivity, 
      com.example.app.R.id.menu_settings, 0); 

    // If you want to see the simulation on emulator or device: 
    try { 
     Thread.sleep(1000); 
     } catch (InterruptedException e) { 
     e.printStackTrace(); 
     } 

    Activity a = getInstrumentation().waitForMonitorWithTimeout(am, 1000); 
    assertEquals(true, getInstrumentation().checkMonitorHit(am, 1)); 

     // Check type of returned Activity: 
     assertNotNull(a); 
     assertTrue(a instanceof Settings); 

     a.finish(); 

} 

Я использую (ActivityInstrumentationTestCase2) для этого модульного теста.

ответ

1

Ваш тестовый код идеально подходит. AssertionFailedError показывает, что активность, открытая с помощью моделирования щелчка по меню, не является объектом ActivityMonitor. Согласно названию menu_settings, я предполагаю, что это ваша активность в отношении вашего приложения, в то время как вы контролируете другую главную деятельность WebView, это причина, по которой ActivityMonitor не попал. Чтобы устранить эту несогласованность, либо измените ActivityMonitor на мониторинг Activity_Pref_Settings, либо измените имитацию меню, чтобы открыть R.id.menu_webview_main.

I also am trying to figure out how to verify that the activity was opened successfully and it was the expected activity launched.

Вы можете использовать instanceof проверить тип возвращаемого деятельности:

public void testThatMenuWillOpenSettings() { 
    // Use false otherwise monitor will block the activity start and resulting waitForMonitorWithTimeout() return null: 
    ActivityMonitor am = getInstrumentation().addMonitor(Activity_Webview_Main.class.getName(), null, false); 

    ... ... 

    // If you want to see the simulation on emulator or device: 
    try { 
    Thread.sleep(1000); 
    } catch (InterruptedException e) { 
    e.printStackTrace(); 
    } 

    Activity a = getInstrumentation().waitForMonitorWithTimeout(am, 1000); 
    assertEquals(true, getInstrumentation().checkMonitorHit(am, 1)); 

    // Check type of returned Activity: 
    assertNotNull(a); 
    assertTrue(a instanceof Activity_Webview_Main); 

    a.finish(); 

} 

Обратите внимание, что дальнейшая проверка в отношении возвращенного деятельности не обязательно, но можно, например, проверить заголовок, текст надписи и т.д.

+0

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

+0

@JaisonBrooksDevelopment, если, щелкнув пункт меню «R.id.menu_settings», откройте FooActivity в своем приложении, а затем в тестовом проекте, чтобы проверить это (FooActivity открывается нажатием menu_settings), ваш ActivityMonitor должен контролировать 'FooActivity.class.getName()'. Я протестировал и воспроизвел «AssertionFailedError: expected: , но был: ' с моим собственным проектом, поэтому я совершенно уверен, что это причина. – yorkw

+0

Это сработало отлично. большое спасибо –

Смежные вопросы