web-dev-qa-db-fra.com

Comment exécuter un test JUnit4 simple dans Android Studio 1.1?

J'ai un projet Android qui affiche "Hello World". Il a été créé à partir du modèle "Blank Activity" de Android Studio.

J'ajoute/crée ensuite une nouvelle classe Java classe dans mon package d'application (le même package qui a mon activité). Je l'appelle Shape et j'ajoute un constructeur simple

public class Shape {
    public Shape(int i){
        if (i==0){
            throw new IllegalArgumentException("Cant have 0");
        }
    }
}

Génial. Maintenant, j'ai une classe qui ne touche pas du tout Android du tout, et je veux la tester unitaire. Que dois-je faire ensuite?

C'est là que ma question s'arrête. Ci-dessous je vais passer en revue ce que j'ai essayé.

Veuillez noter que je n'ai jamais vraiment testé auparavant en Android ou Java. Excusez-moi pour les erreurs de "recrue").

  1. Dans Shape.Java, je vais dans "Naviguer"> "Test"
  2. Appuyez sur Entrée pour sélectionner "Créer un nouveau test"
  3. Obtenez cette fenêtre contextuelle et sélectionnez JUNIT4.

enter image description here

  1. J'ai ensuite appuyé sur le bouton de correction pour corriger la bibliothèque introuvable
  2. Je reçois ce popup

enter image description here

  1. Je ne sais pas vraiment quoi sélectionner, donc je sélectionne la valeur par défaut/en surbrillance.
  2. J'écris mon test

    package com.eghdk.getjunit4towork;
    
    import org.junit.Test;
    
    import static org.junit.Assert.*;
    
    public class ShapeTest {
        @Test(expected = IllegalArgumentException.class)
        public void testShapeWithInvalidArg() {
            new Shape(0);
        }
    }
    
  3. À ce stade, je ne sais pas vraiment comment exécuter mes tests, mais essayez de le faire: enter image description here

  4. Je reçois ces erreurs lors de l'exécution

    Erreur: (3, 17) Gradle: erreur: le package org.junit n'existe pas
    Erreur: (5, 24) Gradle: erreur: le package org.junit n'existe pas
    Erreur: (8, 6) Gradle: erreur: impossible de trouver la classe de symboles Test

22
EGHDK

Depuis Android Studio 1.1, il y a (expérimental) support du test unitaire . Quelques citations de cette page:

Vous devrez spécifier vos dépendances de test dans le fichier build.gradle de votre module Android. Par exemple:

dependencies {
  testCompile 'junit:junit:4.12'
  testCompile "org.mockito:mockito-core:1.9.5"
}

Pour utiliser la prise en charge des tests unitaires dans AS, vous devez suivre les étapes suivantes:

  1. Mettez à jour build.gradle pour utiliser le Android gradle plugin version 1.1.0-rc1 ou version ultérieure (soit manuellement dans le fichier build.gradle ou dans l'interface utilisateur dans Fichier> Structure du projet)

  2. Ajoutez les dépendances de test nécessaires à app/build.gradle (voir ci-dessus).

  3. Activez la fonction de test unitaire dans Paramètres> Gradle> Expérimental.

  4. Synchronisez votre projet.

  5. Ouvrez la fenêtre d'outils "Construire des variantes" (à gauche) et changez l'artefact de test en "Tests unitaires".

  6. Créez un répertoire pour votre code source de test, c'est-à-dire src/test/Java. Vous pouvez le faire à partir de la ligne de commande ou à l'aide de la vue Projet dans la fenêtre de l'outil Projet. Le nouveau répertoire doit être surligné en vert à ce stade. Remarque: les noms des répertoires de source de test sont déterminés par le plugin gradle basé sur une convention.

  7. Créez votre test. Vous pouvez le faire en ouvrant une classe, en cliquant avec le bouton droit sur son nom et en sélectionnant "Aller à> Test". Ajoutez des cas de test.
  8. Faites un clic droit sur votre nouvelle classe ou méthode de test et sélectionnez "Exécuter ...".
  9. (Facultatif) Vous pouvez réduire le temps de compilation en utilisant directement Gradle. Pour ce faire, allez dans le menu Exécuter et sélectionnez "Modifier les configurations". Là, recherchez le modèle JUnit par défaut, supprimez l'étape "Make" avant le lancement et ajoutez à la place une étape "Gradle aware make" (laissez le nom de la tâche vide).

Il est important de savoir qu'il existe deux types de test: androidTest et plain test.

  • androidTest est principalement destiné aux tests que vous exécutez sur un émulateur ou un périphérique, tels que les tests d'instrumentation. Depuis la ligne de commande, vous utilisez ./gradlew connectedCheck pour les exécuter.
  • test est destiné aux tests que vous ne souhaitez pas exécuter sur un périphérique, comme le test unitaire que vous avez écrit. Vous courez ./gradlew test pour exécuter ces tests.

Comme indiqué dans le devis, vous basculez entre androidTest et test dans Android Studio en changeant l'artefact de test.

Naturellement, il est préférable de ne pas exécuter de tests sur un appareil ou un émulateur, car cela accélère beaucoup le processus de test . Avec la nouvelle prise en charge des tests unitaires expérimentaux, vous accédez à des API tronquées Android sans utiliser d'appareil. Cela vous permet de déplacer plus de tests de androidTest vers test.

34
nhaarman

Pour Android studio 1.2 ou supérieur, j'inclus cette réponse car c'est l'un des premiers classements sur google et c'est un excellent et très facile à suivre tutoriel sur la façon de définir des tests unitaires avec Android Studio, voici le lien: https://io2015codelabs.appspot.com/codelabs/Android-studio-testing#1

Après avoir perdu 2 heures à essayer de lancer le test, je l'ai finalement fait avec le lien ci-dessus, j'espère que c'est aussi utile pour vous que pour moi.

4
CommonSenseCode

De nos jours Android Studio (version actuelle 1.4) prend en charge le test unitaire complet sans aucune solution de contournement. Comme suggéré dans le ExampleUnitTest généré automatiquement:

To work on unit tests, switch the Test Artifact in the Build Variants view.

screen shot

3
Andrey

Accédez aux paramètres, puis créez des outils, puis gradle puis expérimental. En décochant expérimental, activez tous les artefacts de test. C'est la fin du jeu

0
Yash