Cette réponse s'adresse aux personnes qui commencent tout juste à tester Android. Je vais fournir deux exemples simples pour vous aider à voir comment les tests fonctionnent. Si vous suivez pendant les 10 prochaines minutes, vous serez prêt à commencer à ajouter vos tests à votre propre application. Je pense que vous serez surpris de voir à quel point c'est facile. J'étais certainement.
Introduction aux tests Android
Il existe deux types de tests différents que vous ferez.
- Tests unitaires locaux. Ceux-ci sont exécutés localement sur la JVM (Java Virtual Machine). Comme ils sont locaux, ils sont rapides. Vous pouvez les utiliser pour tester les parties de votre code qui n'ont besoin que de Java et non des API Android. (Parfois, vous pouvez créer un faux objet API pour tester plus de choses localement. C'est ce qu'on appelle une moquerie . Une simulation
Context
est un exemple.)
- Tests instrumentés. Ces tests sont exécutés sur un appareil réel ou dans l'émulateur. Cela les rend plus lents que les tests locaux. Cependant, ils sont plus flexibles car vous disposez de l'API Android complète.
Créez un nouveau projet et vous verrez les dossiers par défaut suivants.
Tout est déjà là et n'attend que vous pour créer vos tests. Tout est déjà configuré!
Comment créer des tests unitaires locaux
Ouvrez le ExampleUnitTest
fichier montré dans l'image ci-dessus. Ça devrait ressembler a quelque chose comme ca:
public class ExampleUnitTest {
@Test
public void addition_isCorrect() throws Exception {
assertEquals(4, 2 + 2);
}
}
Appuyez sur la double flèche verte pour exécuter tous les tests ou sur la flèche verte unique pour n'en exécuter qu'un. (Dans ce cas, il n'y a qu'un seul test, donc ils font tous les deux la même chose.)
Cela devrait passer (tant qu'il 2 + 2
est encore4
quand vous lisez cette réponse). Félicitations, vous venez de faire votre premier test!
Faire votre propre test
Écrivons notre propre test. Ajoutez d'abord cette classe à votre projet d'application principal afin que nous ayons quelque chose à tester:
public class MyClass {
public int add(int a, int b) {
return a + b;
}
}
Maintenant, changez la addition_isCorrect()
méthode dans la classe de test pour qu'elle ressemble au code suivant (ou ajoutez simplement une autre méthode avec un nom différent):
public class ExampleUnitTest {
@Test
public void addition_isCorrect() throws Exception {
MyClass myClass = new MyClass();
int result = myClass.add(2, 2);
int expected = 4;
assertEquals(expected, result);
}
}
Exécutez-le à nouveau et vous devriez le voir passer. Félicitations, vous venez de créer votre propre premier test! (Eh bien, je suppose que techniquement c'était à moi, mais bon, assez proche. Ce qui est à moi est à vous.)
Comment créer des tests instrumentés
Ouvrez le ExampleInstrumentedTest
fichier. Ça devrait ressembler a quelque chose comme ca:
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {
@Test
public void useAppContext() throws Exception {
// Context of the app under test.
Context appContext = InstrumentationRegistry.getTargetContext();
assertEquals("com.example.myapp", appContext.getPackageName());
}
}
Appuyez à nouveau sur l'un de ces boutons verts.
Tant que vous avez un vrai appareil connecté ou que l'émulateur est configuré, il aurait dû le démarrer et exécuter votre application. Félicitations, vous venez de faire votre premier test instrumenté!
Faire votre propre test
Les tests instrumentés utilisent Espresso pour exécuter les tests. C'est un peu comme votre propre petit utilisateur de robot que vous pouvez faire tester votre application. Vous pouvez lui dire de faire quelque chose comme appuyer sur un bouton ou lire les propriétés d'un TextView.
Vous pouvez écrire les instructions pour faire le test à la main, mais puisque nous ne faisons que commencer, utilisons la fonction d'enregistrement automatique . C'est super simple.
Ajoutez d'abord un bouton à votre interface utilisateur pour que nous ayons quelque chose avec quoi travailler. J'ai fait ça:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.myapp.MainActivity">
<Button
android:id="@+id/myButton"
android:text="Click me"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</android.support.constraint.ConstraintLayout>
Appuyez ensuite sur Exécuter> Enregistrer le test expresso dans le menu.
Après avoir démarré, cliquez sur le bouton dans l'émulateur, puis pour terminer, choisissez OK dans la boîte de dialogue Enregistrer. Il devrait générer automatiquement le code de test suivant.
@LargeTest
@RunWith(AndroidJUnit4.class)
public class MainActivityTest {
@Rule
public ActivityTestRule<MainActivity> mActivityTestRule = new ActivityTestRule<>(MainActivity.class);
@Test
public void mainActivityTest() {
ViewInteraction appCompatButton = onView(
allOf(withId(R.id.myButton), withText("Click me"), isDisplayed()));
appCompatButton.perform(click());
}
}
Génial! Vous venez de créer votre premier test instrumenté! C'était super facile. Vous devriez probablement ajouter une assertion pour en faire un vrai test, mais c'est également assez facile à faire avec l'enregistreur. Regardez cette vidéo pour aller un peu plus loin.
Une étude plus approfondie
Je regardais d'abord les vidéos, puis je lisais la documentation. Tout cela est très utile. Le dernier lien est vers une série d'articles qui couvrent des points importants à prendre en compte lors du choix des éléments à tester.