J'utilise Espresso pour tester un Activity
qui affiche les données récupérées en utilisant un ContentProvider
.Comment utiliser MockContentResolver lors du test d'une activité Android avec Espresso?
J'aimerais se moquer du fournisseur de contenu en utilisant MockContentProvider et MockContentResolver, mais je ne sais pas comment faire la méthode d'activité getContentResolver()
retour d'un résolveur simulé.
(je pourrais insérer les données avant d'exécuter le test, mais je voudrais savoir s'il est possible d'utiliser un fournisseur fictif à la place)
MISE À JOUR: Je ne pouvais pas faire encore travailler, donc je J'inclus un code pour essayer de le rendre plus clair.
MyActivity.java
MyActivity extends AppCompatActivity {
...
private delete(String id) {
// The method getContentResolver() is what I want to mock when testing
getContentResolver().delete(
Contract.Item.makeUriForItem(id), null, null);
}
...
}
MyActivityTests.java
@RunWith(AndroidJUnit4.class)
@LargeTest
public class StockChartDetailsActivityTests {
@Rule
public ActivityTestRule<MyActivity> myActivityTestRule = new ActivityTestRule<MyActivity>(
MainActivity.class);
@Test
public void test() {
}
}
Je ne pouvais pas faire la suggestion d'utiliser Dagger2 travailler parce que getContentResolver()
est mis en œuvre par Android et je ne peux pas utiliser @Inject
pour injecter mon propre ContentResolver
.
Je pourrais utiliser différentes stratégies:
- données dans la base de données à insérer avant l'essai.
- avoir une autre couche, comme une couche logique métier, et déplacer les appels vers
getContentResolver()
vers les classes de cette couche, puis injecter (et mocker) les classes de logique métier.
Mais avant d'utiliser l'une de ces stratégies, j'aimerais savoir s'il est possible d'utiliser MockContentResolver
.
S'il vous plaît inclure un exemple de code avec votre question. –