0
環境設定がどこにも格納されていないことを安全にアサートする方法を見つけようとしました。それはまだキャッシュ機構を理解していないと思われ、ドキュメントはそれを明確にしていない。これは私がやったことです:共有環境設定が存在しないことを安全にアサートする方法
File prefsFile = new File("/data/data/"+context.getPackageName() + "/shared_prefs/"
+ context.getPackageName() + "_preferences.xml");
prefsFile.delete();
assertFalse(prefsFile.exists()); // success
// This assertion could fail - why?
assertEquals(0, context.getSharedPreferences(context.getPackageName()+"_preferences",
MODE_PRIVATE).getAll().size());
私は環境設定ファイルを削除しますが、getAll().size()
がゼロ以外の値を返すことも可能です。
誰かが理由を説明できますか?
投稿ありがとうございます!したがってSharedPreferencesインスタンスは永続化されたprefsをコピー/キャッシュするだけであり、単にjava.io.Fileオブジェクトのような参照を提供するだけではありません。最初のポイント:delete()は、ファイルが 'なぜ存在するのですか?だから、あなたはprefsのインプロセスコピーだけをテストするだろうか? – cody
"SharedPreferencesインスタンスは確かに永続化された設定をコピー/キャッシュする" - そうです。実際には、あなたがその背後にあるファイルを混乱させると、それは好きではありません。 "delete()は、ファイルが存在しない場合は単にfalseを返すので、なぜチェックを行うのですか?" - あなたが 'delete()'からの戻り値を調べていないからです。 「そのため、プロセスのコピーをテストするだけですか?」 - 私は実際のAPIを使用します。 prefsをクリアして変更をコミットすると、ファイルの内容がクリアされます。 – CommonsWare
さて、ファイルが削除前に存在していたのか、削除されたのかを確認したくなかったので、それが存在しないことを確認したかっただけです。ただ1つの質問:どのような種類のシステム提供の初期値がファイルに書き込まれていた可能性がありますか? – cody