1

Junitで簡単な単体テストを作成して、2つのアクションバーオーバーフローメニュー項目に対する意図が正しいアクティビティを開くかどうかをテストしようとしています。私のテストが戻ってくるのに問題があります

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)を使用しています。

4

1 に答える 1

1

あなたのテストコードは完璧です。AssertionFailedError は、メニュー クリック シミュレーションによって開かれたアクティビティが、ActivityMonitor が監視しているものではないことを示しています。名前によると、menu_settingsアプリのパーフェレンス アクティビティだと思いますが、別の WebView メイン アクティビティを監視しているのに対し、これが ActivityMonitor がヒットしない理由です。この不一致を修正するには、ActivityMonitor を変更して Activity_Pref_Settings を監視するか、メニュー クリック シミュレーションを変更して R.id.menu_webview_main を開きます。

また、アクティビティが正常に開かれたこと、およびそれが予期されたアクティビティが開始されたことを確認する方法を見つけようとしています。

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();

}

返されたアクティビティをさらにチェックする必要はありませんが、可能であることに注意してください。たとえば、タイトル、ラベル テキストなどをチェックしてください。

于 2013-02-19T22:59:45.157 に答える