web-dev-qa-db-ja.com

Android JUnit4 Testing-どこからコンテキストを取得するのですか?

Sqliteを使用するアプリを作成する必要があります。次に、単体テストを記述します。これらの単体テストでは、クラスSQLiteBridgeをテストする必要があります。 SQLiteBridgeは、モデルのすべての子クラスにDAOを提供します。

SQLiteBridgeを作成するためのコンテキストが必要になるという問題が発生しました。 SQLiteBridgeは、システム上でSQLiteデータベースを作成して処理します。

Context-Objectはどこから取得しますか?

私の設定は次のようです(つまり、Junit4 [thanks god]を使用しています): http://tools.Android.com/tech-docs/unit-testing-support

編集:古いAndroidTestCaseのような方法でJunit4を失うことなく拡張できることを願っています。 :)

24
Dominic Fuchs

ここで説明されているように: https://code.google.com/p/Android-test-kit/wiki/AndroidJUnitRunnerUserGuide InstrumentationRegistryを使用してコンテキストを取得します。

ただし、InstrumentationRegistry.getContext()を直接呼び出すと、データベースを開くときに例外が発生する場合があります。これは、getContext()によって返されるコンテキストが、アプリケーション/単体テストのコンテキストではなく、インストルメンテーションのコンテキストを指しているためと考えています。代わりにInstrumentationRegistry.getInstrumentation().getTargetContext()を使用してください

例えば:

@RunWith(AndroidJUnit4.class)
public class SqliteTest {

    Context mMockContext;

    @Before
    public void setUp() {
        mMockContext = new RenamingDelegatingContext(InstrumentationRegistry.getTargetContext(), "test_");
    }
}

RenamingDelegatingContextは、ファイル/データベース名の前に単にtest_を付けて、同じシミュレーターにあるデータを上書きしないようにします。

53
Dustin