Les tests d'instrumentation s'exécutent sur des appareils Android, qu'ils soient physiques ou émulés. En tant que ils peuvent exploiter les API du framework Android. Tests d'instrumentation offrent donc plus de fidélité que les tests locaux, même s'ils sont beaucoup plus lentement.
Nous vous recommandons de n'utiliser des tests d'instrumentation que dans les cas où vous devez tester le comportement d'un appareil réel. AndroidX Test fournit plusieurs bibliothèques qui facilitent l'écriture de tests d'instrumentation en cas de besoin.
Configurer votre environnement de test
Dans votre projet Android Studio, vous stockez les fichiers sources des instruments
tests dans module-name/src/androidTest/java/
. Ce répertoire existe déjà lorsque
vous créez un projet contenant un exemple de test d'instrumentation.
Avant de commencer, vous devez ajouter les API AndroidX Test, qui vous permettent de
créer et exécuter du code de test
d'instrumentation pour vos applications. AndroidX Test inclut un
Exécuteur de test JUnit 4, AndroidJUnitRunner
et API pour les tests fonctionnels de l'interface utilisateur
comme Espresso, UI Automator et Test Compose.
Vous devez également configurer les dépendances de test Android pour votre projet afin de Utilisez le lanceur de test et les API de règles fournies par AndroidX Test.
Vous devez spécifier ces bibliothèques dans le fichier build.gradle
de premier niveau de votre application.
en tant que dépendances:
dependencies {
androidTestImplementation "androidx.test:runner:$androidXTestVersion"
androidTestImplementation "androidx.test:rules:$androidXTestVersion"
// Optional -- UI testing with Espresso
androidTestImplementation "androidx.test.espresso:espresso-core:$espressoVersion"
// Optional -- UI testing with UI Automator
androidTestImplementation "androidx.test.uiautomator:uiautomator:$uiAutomatorVersion"
// Optional -- UI testing with Compose
androidTestImplementation "androidx.compose.ui:ui-test-junit4:$compose_version"
}
Vous trouverez les dernières versions dans les notes de version d'AndroidX et dans Compose Notes de version de l'UI
Pour utiliser les classes de test JUnit 4 et avoir accès à des fonctionnalités telles que le filtrage des tests,
veillez à spécifier AndroidJUnitRunner comme instrumentation de test par défaut
d'exécuteur dans votre projet en incluant le paramètre suivant dans le fichier
Fichier build.gradle
au niveau du module:
android {
defaultConfig {
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
}
Créer une classe de test d'instrumentation
Votre classe de test d'instrumentation doit être une classe de test JUnit 4 semblable à la classe décrite dans la section expliquant comment créer des tests en local.
Pour créer une classe de test JUnit 4 instrumentée, spécifiez AndroidJUnit4
comme
le lanceur de test par défaut.
L'exemple suivant montre comment écrire un test d'instrumentation pour vérifier
que l'interface Parcelable est correctement implémentée pour
Classe LogHistory
:
Kotlin
import android.os.Parcel import android.text.TextUtils.writeToParcel import androidx.test.filters.SmallTest import androidx.test.runner.AndroidJUnit4 import com.google.common.truth.Truth.assertThat import org.junit.Before import org.junit.Test import org.junit.runner.RunWith const val TEST_STRING = "This is a string" const val TEST_LONG = 12345678L // @RunWith is required only if you use a mix of JUnit3 and JUnit4. @RunWith(AndroidJUnit4::class) @SmallTest class LogHistoryAndroidUnitTest { private lateinit var logHistory: LogHistory @Before fun createLogHistory() { logHistory = LogHistory() } @Test fun logHistory_ParcelableWriteRead() { val parcel = Parcel.obtain() logHistory.apply { // Set up the Parcelable object to send and receive. addEntry(TEST_STRING, TEST_LONG) // Write the data. writeToParcel(parcel, describeContents()) } // After you're done with writing, you need to reset the parcel for reading. parcel.setDataPosition(0) // Read the data. val createdFromParcel: LogHistory = LogHistory.CREATOR.createFromParcel(parcel) createdFromParcel.getData().also { createdFromParcelData: List<Pair<String, Long>> -> // Verify that the received data is correct. assertThat(createdFromParcelData.size).isEqualTo(1) assertThat(createdFromParcelData[0].first).isEqualTo(TEST_STRING) assertThat(createdFromParcelData[0].second).isEqualTo(TEST_LONG) } } }
Java
import android.os.Parcel; import android.util.Pair; import androidx.test.runner.AndroidJUnit4; import com.google.common.truth.Truth.assertThat; import java.util.List; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; // @RunWith is required only if you use a mix of JUnit3 and JUnit4. @RunWith(AndroidJUnit4.class) public class LogHistoryAndroidUnitTest { public static final String TEST_STRING = "This is a string"; public static final long TEST_LONG = 12345678L; private LogHistory mLogHistory; @Before public void createLogHistory() { mLogHistory = new LogHistory(); } @Test public void logHistory_ParcelableWriteRead() { // Set up the Parcelable object to send and receive. mLogHistory.addEntry(TEST_STRING, TEST_LONG); // Write the data. Parcel parcel = Parcel.obtain(); mLogHistory.writeToParcel(parcel, mLogHistory.describeContents()); // After you're done with writing, you need to reset the parcel for reading. parcel.setDataPosition(0); // Read the data. LogHistory createdFromParcel = LogHistory.CREATOR.createFromParcel(parcel); List<Pair<String, Long>> createdFromParcelData = createdFromParcel.getData(); // Verify that the received data is correct. assertThat(createdFromParcelData.size()).isEqualTo(1); assertThat(createdFromParcelData.get(0).first).isEqualTo(TEST_STRING); assertThat(createdFromParcelData.get(0).second).isEqaulTo(TEST_LONG); } }
Exécuter des tests d'instrumentation
Les tests d'instrumentation peuvent être exécutés sur des appareils réels ou des émulateurs. Dans l'application Android Studio, qui vous apprend à:
Ressources supplémentaires
Les tests de l'interface utilisateur sont généralement des tests d'instrumentation qui vérifient le comportement l'UI. Ils utilisent des frameworks tels qu'Espresso ou Compose Test. Pour apprendre Pour en savoir plus, consultez le guide de test de l'interface utilisateur.
Pour en savoir plus sur l'utilisation des tests d'instrumentation, consultez les ressources suivantes : ressources.