2

Robotiumを使用するのは初めてですが、フォーラムのどこにもこれに対する答えが見つからないようです。テストしようとしているPreferenceActivityがあります。問題は、設定をクリックする必要があるときはいつでも単体テストが失敗することです。

具体的には、いくつかのテストを実行しているCheckBoxPreferenceがあります。CheckBoxPreferenceがチェックされているときに、画面上に有効になっている(グレー表示されていない)特定の設定があることを確認したいと思います。その逆も同様です。searchText()現在のところ、 /メソッドを使用して設定を見つけることさえできませんwaitForText()(これは画面の最初の設定です)。clickOnView()から設定のビューを取得した後、メソッドを使用してみましたgetView()

私が今できる最善のことは、AndroidのsetChecked()メソッドを使用してCheckBoxPreferenceの状態を操作することだと思われます。この方法でのテスト可能であると思いますが、私が見ている基本的なことがあります。PreferenceActivityもListActivityであるため、ListActivityのテストに関連する質問を検索してみましたが無駄になりました。

次のいくつかのリンクは、PreferenceActivitiesとRobotiumでの作業の良いスタートを切りました。

これが私が使っているコードです:

public void testEnabledChecked() throws Exception {
    CheckBoxPreference enabled = PrefTestingUtils.getCheckBoxPreference(mSolo, mActivity, 
            (String) getVal("KEY_ENABLED"));
    EditTextPreference recipient = PrefTestingUtils.getEditTextPreference(mSolo, mActivity, 
            (String) getVal("KEY_RECIPIENT"));
    EditTextPreference title = PrefTestingUtils.getEditTextPreference(mSolo, mActivity, 
            (String) getVal("KEY_TITLE"));
    ListPreference interval = PrefTestingUtils.getListPreference(mSolo, mActivity, 
            (String) getVal("KEY_INTERVAL"));

    // ensures that the preference is unchecked
    if (!enabled.isChecked()) {
        Log.d(TAG, "Enabled preference unchecked, clicking on it");

        // mSolo.clickOnView(enabled.getView(null, null)); // Attempt #1
        // mSolo.clickOnText("Enabled"); // Attempt #2
        // mSolo.clickOnCheckBox(0); // Attempt #3
        // mSolo.searchText("Enabled"); // cannot find view
    }

    assertTrue(enabled.isChecked()); // AssertionFailedError here
    assertTrue(recipient.isEnabled());
    assertTrue(title.isEnabled());
    assertTrue(interval.isEnabled());
}

PrefTestingUtils関数が実際に設定への有効な参照を返していることを確認しました。すべてのPrefTestingUtils関数は次のようになります。

public static CheckBoxPreference getCheckBoxPreference(Solo solo, 
        PreferenceActivity activity, String key) {
    if (solo == null || activity == null || key == null) {
        Log.d(TAG, "getCheckBoxPreference::Null parameter");
        return null;
    }

    Preference p = activity.findPreference(key);
    if (p instanceof CheckBoxPreference) {
        return (CheckBoxPreference) p;
    }
    return null;
}

誰でもできる助けをいただければ幸いです。ありがとう!

4

1 に答える 1

1

これが私が思いついたもので、機能しているようです。

まず、CheckBoxPreferenceへの参照を取得する必要があります。

private CheckBoxPreference getCheckBoxPref(String key) {
    ArrayList<ListView> currentListViews = mSolo.getCurrentListViews();
    // get the lone ListAdapter for the PreferenceActivity
    ListAdapter listAdapter = currentListViews.get(0).getAdapter();

    int cnt = listAdapter.getCount();
    for (int i = 0; i < cnt; i++) {
        Object o = listAdapter.getItem(i);
        if (o instanceof CheckBoxPreference) {
            CheckBoxPreference pref = (CheckBoxPreference) o;
            if (pref.getTitle().equals(key)) {
                return pref;
            }
        }
    }
    return null;
}

次に、を使用して、設定のタイトルを指定したclickOnText()メソッドを使用して設定をクリックできます。最後に、クリックした後、しばらく眠らなければならないことがわかりました。250ミリ秒にMINI_SLEEP定義しました。

public void testCheckBoxEnabled() {
    CheckBoxPreference pref = getCheckBoxPref("Enabled");
    assertNotNull(pref);
    assertFalse(pref.isChecked());
    mSolo.clickOnText("Enabled");
    mSolo.sleep(MINI_SLEEP);
    assertTrue(pref.isChecked());
}

これが必要な人に役立つことを願っています。

于 2012-07-05T16:52:57.450 に答える