Android JUnit4 Testing-où obtenir le contexte?

Je dois construire une application avec l'utilisation de sqlite. Maintenant, je veux écrire mes tests unitaires. Ces tests unitaires devraient tester ma classe SQLiteBridge. SQLiteBridge fournit des DAO pour chaque classe enfant du modèle.

Maintenant j'ai le problème que j'ai besoin d'un contexte pour créer mon SQLiteBridge. SQLiteBridge crée et gère une base de données SQLite sur le système..

Où obtenir L'objet Context?

Ma configuration est comme ici (donc j'utilise Junit4 [merci Dieu]): http://tools.android.com/tech-docs/unit-testing-support

EDIT: j'espère qu'il existe un moyen comme l'ancien AndroidTestCase d'étendre sans perdre Junit4. :)

22
demandé sur JulianHarty 2015-05-19 10:57:42

1 réponses

Comme décrit ici: https://code.google.com/p/android-test-kit/wiki/AndroidJUnitRunnerUserGuide Utilisez le InstrumentationRegistry pour obtenir le contexte.

Cependant, si vous appelez InstrumentationRegistry.getContext() directement, Vous pouvez obtenir une exception ouvrant votre base de données. Je crois que c'est parce que le contexte retourné par getContext() pointe vers le contexte de l'instrumentation plutôt que celui de votre application / test unitaire. Utilisez plutôt InstrumentationRegistry.getInstrumentation().getTargetContext()

Par exemple:

@RunWith(AndroidJUnit4.class)
public class SqliteTest {

    Context mMockContext;

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

Le RenamingDelegatingContext préfixe simplement les noms de fichier/base de données avec test_ pour vous empêcher d'écraser les données que vous pouvez avoir dans le même simulateur.

51
répondu Dustin Thomson 2016-07-22 15:09:13