20

現在、アプリのサードパーティサービスをテストしようとしていますが、特定の実行ごとに実行されている各テストを特定する必要があります。

testAppを実行するたびに複数のテストを実行できるため、すべてのテストを特定する必要があります。

私が考えたのは、デバイス名とビルド(ここでは多くのデバイスはありません)、および各テストのインデックスを保存することです。

private String getTestId(){
    SharedPreferences settings = getPreferences(0);
    SharedPreferences.Editor editor = settings.edit();
    int testNumber = settings.getInt("id", 0);
    editor.putInt("id", testNumber+1);
    editor.commit();
    String id = Build.DEVICE + Build.VERSION.RELEASE+" - test number: "+testNumber;
    return id;
}

テストを実行するたびにこの関数を実行すると時間がかかりますか、それとも海岸を恐れることなくこれを実行できますか?

答えが「時間がかかる」の場合、すべてのテストを区別するために、テストを実行するたびに何をすることをお勧めしますか?

4

3 に答える 3

16

についてSharedPreferences

SharedPreferencesは最初のロード後にキャッシュするため、データをロードするためのディスクアクセスには時間がかかりますが、1回だけです。このペナルティを回避するために、テストスイートの早い段階でSharedPreferencesをロードしてみることができます。

appyは非同期であるため、データを永続化するには、SharedPreferences.Editor.commit()ではなくSharedPreferences.Editor.apply ()を選択する必要があります。ただし、両方のドキュメントを読んで、どちらがあなたのケースに当てはまるかを確認してください。

于 2012-09-26T07:32:03.153 に答える
1

putInt()特定のキーに対して初めてのようなメソッドを使用する場合、かなりの時間がかかる可能性があることに気づきました。また、他のファイルへの書き込み方法と同等である必要があります。

于 2012-09-24T19:53:19.950 に答える
1

質問にはすでに答えがありますが、他の人が来てコードサンプルを探している場合に備えて、SharedPreferencesと対話するためにこのユーティリティクラスをまとめました。

commit()を呼び出すと、使用可能な場合はapply()メソッドが使用されます。それ以外の場合は、古いデバイスではデフォルトでcommit()に戻ります。

public class PreferencesUtil {

    SharedPreferences prefs;
    SharedPreferences.Editor prefsEditor;
    private Context mAppContext;
    private static PreferencesUtil sInstance;

    private boolean mUseApply;

    //Set to private
    private PreferencesUtil(Context context) {
        mAppContext = context.getApplicationContext();
        prefs = PreferenceManager.getDefaultSharedPreferences(mAppContext);
        prefsEditor = prefs.edit();

        //Indicator whether or not the apply() method is available in the current API Version
        mUseApply = Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD;
    }

    public static PreferencesUtil getInstance(Context context) {
        if (sInstance == null) {
            sInstance = new PreferencesUtil(context);
        }
        return sInstance;
    }

    public boolean getBoolean(String key, boolean defValue) {
        return prefs.getBoolean(key, defValue);
    }

    public int getInt(String key, int defValue) {
        return prefs.getInt(key, defValue);
    }

    public String getString(String key, String defValue) {
        return prefs.getString(key, defValue);
    }

    public String getString(String key) {
        return prefs.getString(key, "");
    }

    public void putBoolean(String key, boolean value) {
        prefsEditor.putBoolean(key, value);
    }

    public void putInt(String key, int value) {
        prefsEditor.putInt(key, value);
    }

    public void putString(String key, String value) {
        prefsEditor.putString(key, value);
    }

    /**
     * Sincle API Level 9, apply() has been provided for asynchronous operations.
     * If not available, fallback to the synchronous commit()
     */
    public void commit() {
        if (mUseApply)
            //Since API Level 9, apply() is provided for asynchronous operations
            prefsEditor.apply();
        else
            //Fallback to syncrhonous if not available
            prefsEditor.commit();
    }
}
于 2013-02-14T04:57:27.707 に答える