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. :)
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.