24

テスト中に追加されたすべての 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 1追加setUp()方法

EDIT 2拡張クラスの提供

4

4 に答える 4

21

EspressoActivityTestRuleから使用している場合は、これを試してください。

@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();
}
于 2016-01-29T10:35:59.930 に答える
4

メソッドを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()));
    }
 }
于 2016-03-30T09:39:23.480 に答える
3

クラスを拡張する必要があることをテストしますInstrumentationTestCase

そして、使用する必要がありますgetInstrumentation().getTargetContext()

アクティビティを直接操作する必要がある場合は、テスト クラスを拡張する必要があります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();
    }
}
于 2015-10-14T16:57:48.707 に答える