テスト中に追加されたすべてのSharedPreferencesをクリアしようとしています。私はすでにいくつかの投稿と公式ドキュメントを読みました( SharedPreferences.Editor.clear() )。しかし、単体テストの実行後にアプリケーションを起動すると、まだテスト値が見つかりました。
だから、 AndroidTestCase.tearDown() で、私はこれを作ります:
_public class PrivateStorageUtilsTest extends AndroidTestCase {
private static final String KEY_SP_PACKAGE = "PrivateStorageUtilsTest";
protected void setUp() throws Exception {
super.setUp();
// Clear everything in the SharedPreferences
SharedPreferences sharedPreferences = getContext()
.getSharedPreferences(KEY_SP_PACKAGE, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.clear();
editor.commit();
}
protected void tearDown() throws Exception {
// Clear everything in the SharedPreferences
SharedPreferences sharedPreferences = getContext().
getSharedPreferences(KEY_SP_PACKAGE, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.clear();
editor.commit();
}
}
_
SOで見つけた他のすべての質問は、commit()
の後にclear()
を追加することに関するものでした。これはすでにここで行いました。
EDIT 1setUp()
メソッドの追加
編集2拡張クラスの提供
_ActivityInstrumentationTestCase2
_ を拡張し、getInstrumentation().getTargetContext()
を使用して、インストルメントされている(テスト中の)ターゲットアプリケーションのコンテキストを取得する必要があります。
Espresso からActivityTestRule
を使用している場合は、次のことを試してください。
@Rule
public ActivityTestRule<MainActivity> activityTestRule =
new ActivityTestRule<MainActivity>(MainActivity.class) {
@Override
protected void beforeActivityLaunched() {
clearSharedPrefs(InstrumentationRegistry.getTargetContext());
super.beforeActivityLaunched();
}
};
Stevo.mitのclearSharedPrefs
のわずかに変更されたバージョン:
private static final String KEY_SP_PACKAGE = "PrivateStorageUtilsTest";
/**
* Clears everything in the SharedPreferences
*/
private void clearSharedPrefs(Context context) {
SharedPreferences prefs =
context.getSharedPreferences(KEY_SP_PACKAGE, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.clear();
editor.commit();
}
テストクラスは拡張する必要があります InstrumentationTestCase
。
そして、getInstrumentation().getTargetContext()
を使用する必要があります。
activityを直接操作する必要がある場合は、テストクラスを拡張する必要があります ActivityInstrumentationTestCase2
。
したがって、テストケースは次のようになります。
public class PrivateStorageUtilsTest extends InstrumentationTestCase {
private static final String KEY_SP_PACKAGE = "PrivateStorageUtilsTest";
protected void setUp() throws Exception {
super.setUp();
clearSharedPrefs();
}
protected void tearDown() throws Exception {
super.tearDown();
clearSharedPrefs();
}
/**
* Clears everything in the SharedPreferences
*/
private void clearSharedPrefs() {
SharedPreferences sharedPreferences = getInstrumentation().getTargetContext().
getSharedPreferences(KEY_SP_PACKAGE, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.clear();
editor.commit();
}
}
AndroidJUnit4を使用してメソッドを実行しますが、@ Beforeおよび@Afterとして呼び出されると完全に機能します。
@RunWith(AndroidJUnit4.class)
@LargeTest
public class MyBusStopsTest {
@Rule
public ActivityTestRule<MyBusStopsActivity> mActivityRule = new ActivityTestRule<>(
MyBusStopsActivity.class);
@Before
@After
public void cleanSheredPrefs(){
SharedPreferences sharedPreferences =
getInstrumentation().getTargetContext().getSharedPreferences(MyBusStopsActivity.FAV_LIST, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.clear();
editor.commit();
}
@Test
public void showChooseBusStopActivityOnFABClick() {
onView(withId(R.id.fab)).perform(click());
onView(withChild(withId(R.id.choose_bus_button))).check(matches(isDisplayed()));
}
}