web-dev-qa-db-fra.com

Quel est le but des annotations @SmallTest, @MediumTest et @LargeTest dans Android?

Je suis nouveau sur Android et j'ai vu un exemple de code utilisant ces annotations. Par exemple:

@SmallTest
public void testStuff() {
    TouchUtils.tapView(this, anEditTextView);
    sendKeys("H E L P SPACE M E PERIOD");
    assertEquals("help me.", anEditTextView.getText().toString());
}

Qu'est-ce que cette annotation accomplit?

91

Ce billet de blog l'explique le mieux. Fondamentalement, c'est la suivante:

testing chart

  1. Petit: ce test n'interagit avec aucun système de fichiers ou réseau.
  2. Moyen: Accède aux systèmes de fichiers sur la boîte qui exécute des tests.
  3. Large: accède aux systèmes de fichiers externes, aux réseaux, etc.

Selon le blog des développeurs Android , un petit test devrait prendre <100 ms, un test moyen <2 s et un grand test <120 s.

Voir cette page (recherchez "@SmallTest") pour savoir quels tests doivent être exécutés.

130
David Weiser

En complément de réponse de Davidann et principalement question de OP dans le commentaire:

Dans le contexte du code ci-dessus, est-ce réellement [~ # ~] [~ # ~] autre chose que de laisser une note aux autres développeurs? Applique-t-il quelque chose? Y a-t-il des outils qui utilisent cette annotation? À quoi sert-il dans Android?

Vous pouvez exécuter un groupe de tests annotés avec une annotation spécifique.

De documentation AndroidJUnitRunner :

Exécution d'une taille de test spécifique, c'est-à-dire annotée avec SmallTest ou MediumTest ou LargeTest :

adb Shell am instrument -w -e size [small | medium | large] com.Android.foo/Android.support.test.runner.AndroidJUnitRunner

Vous pouvez également configurer ces paramètres via gradle:


    Android {
        ...
        defaultConfig {
            ...
            testInstrumentationRunnerArgument 'size', 'Large'
        }
    }

Voir cet article de blog pour plus de détails.

7
azizbekian

Vous pouvez également annoter les tests unitaires POJO avec @Category(MediumTest.class) ou @Category(LargeTest.class), etc. en définissant votre propre Catégories - voir test-categories = repo pour un exemple

1
Rhisiart