44 votes

Développement basé sur des tests Android

J'ai une grande expérience dans la création des applications Android. Pour mon nouveau projet, nous avons décidé de faire le Test Driven Development (TDD). J'ai été faire mes mains mouillées sur Robotium pour l'Utilisateur d'évaluation de scénarios, et il fonctionne très bien et semble trop facile.

Pour les tests unitaires, j'ai essayé de se moquer de Contexte à l'aide de (MockContext Android Classe), mais je suis incapable de le faire. Je suis allé à travers ce blog http://sites.google.com/site/androiddevtesting/ et par le biais de ce http://sdudzin.blogspot.com/2011/01/easy-unit-testing-for-android.html , ce qui suggère que les moqueries dans les applications Android est encore très limitée et difficile, et ont suggéré d'utiliser PowerMock, jMockit, JeasyTest, ou Roboelectric (en combinaison avec Mockito et Maven) et même RoboGuice.

J'aimerais avoir des suggestions de vous les gars sur lequel framework de test unitaire, à votre avis, est le meilleur pour tester des applications Android. (en particulier les tests Android classes, donnant ainsi un simulacre de Contextes et d'autres se moquant de fonctionnalités, de sorte que je peux faire de mon cas de test aussi indépendant que possible). Des suggestions ou des pointeurs serait utile . Merci

30voto

Paul Butcher Points 5349

Pour tester hors périphérique, regardez Robolectric

Pour tester sur l'appareil, regardez Borachio

En bout de ligne: il est toujours très, très difficile de bien faire. Les choses s’améliorent (la situation est bien meilleure aujourd’hui qu’il ya 6 mois), mais Android est sans aucun doute l’environnement le plus hostile pour les tests pour lequel j'ai écrit des programmes.

17voto

Nima Points 2127

Faire TDD dans Android, personnellement, j'utilise tous les éléments suivants:

  • FEST-android: FEST assertions pour Android
  • Mockito: Moqueur Cadre
  • Robolectric: framework de test Unitaire qui fonctionne sans avoir besoin de l'émulateur Android
  • Robotium: tester l'INTERFACE utilisateur (les Besoins de l'émulateur ou appareil)

Aussi: Utilisation de l'injection de dépendances des bibliothèques comme Poignard ou Roboguice simplifiera grandement vos tests unitaires et d'intégration. Exécuter des tests sur plusieurs appareils, pensez à utiliser la Cuillère.

4voto

Abhinav Points 2633
  • J'utilise ActivityInstrumentationTestCase2 dans le cas d'Activités pour le TDD (ou BDD plutôt), et d'écrire normale des tests unitaires pour l'ensemble de la logique. Cela permet aussi de me séparer la logique des Activités.
  • Les applications mobiles, par nature, sont de l'INTERFACE utilisateur centrée sur l'. Par conséquent, il n'est pas sens de se moquer de l'INTERFACE utilisateur, même si elle fait l'Unité de test comme un Test Fonctionnel.
  • Pour ajouter des Extras pour les intentions, vous pouvez personnaliser l'intention de le tester, ou de le faire pour tous les tests en remplaçant le programme d'installation.
  • On se moque de donner beaucoup de questions sur Android, j'utilise donc les talons.

Un exemple est donné ci-dessous. L'Activité montre Bonjour tout le Monde, lorsque vous cliquez sur un bouton

public class HelloWorldActivityTest extends
        ActivityInstrumentationTestCase2<HelloWorldActivity> {

    private HelloWorld activity;

    public HelloWorldActivityTest() {
        super(HelloWorldActivityTest.class);
    }

    public void testShouldRenderGreetingOnButtonClick() {
        activity = this.getActivity();
        Button button = (Button) activity.findViewById(R.id.btn_greet);
        TouchUtils.clickView(this, button);
        assertEquals("Hello World!",
                ((TextView) activity.findViewById(android.R.id.greeting_text))
                        .getText());
    }

}

EDIT: les Choses ont changé depuis que j'ai posté la réponse. Mockito a maintenant raisonnablement bon support pour Android. Et pour les tests, nous avons déménagé de ActivityInstrumentationTestCase2 à Robolectric, juste sur la vitesse pure de la JVM dans la phase de développement. Le Android un Framework de Test est idéal pour l'Intégration et les tests Fonctionnels, pas juste pour les Tests Unitaires.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X