web-dev-qa-db-fra.com

Android Développement piloté par les tests

J'ai une expérience considérable dans la création d'applications Android. Pour mon nouveau projet, nous avons décidé de faire du développement piloté par les tests (TDD). J'ai mis la main sur Robotium pour les tests de scénarios utilisateur, et cela fonctionne bien et semble facile aussi.

Pour les tests unitaires, j'ai essayé de me moquer du contexte en utilisant (MockContext Android Class) mais je suis incapable de le faire. J'ai parcouru ce blog http://sites.google.com)/site/androiddevtesting / et à travers ceci http://sdudzin.blogspot.com/2011/01/easy-unit-testing-for-Android.html , ce qui suggère que se moquer de = Android sont encore très limitées et difficiles, 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 votre part sur le cadre de test unitaire qui, à votre avis, est le meilleur pour tester Android. (En particulier les tests Android, éventuellement en donnant des contextes simulés et d'autres fonctionnalités moqueuses afin que je puisse rendre mes cas de test aussi indépendants que possible). Toute suggestion ou pointeur serait utile. Merci

44
Muhammad Shahab

Pour les tests hors appareil, regardez Robolectric

Pour les tests sur l'appareil, regardez Borachio

Conclusion: il est encore très, très difficile de bien faire. Les choses s'améliorent (la situation est nettement meilleure aujourd'hui qu'elle ne l'était il y a 6 mois) mais Android est confortablement l'environnement le plus hostile aux tests pour lequel j'ai jamais écrit des programmes.

30
Paul Butcher

Pour faire du TDD sous Android, j'utilise personnellement tous les éléments suivants:

  • assertj-Android : assertions pour Android
  • Mockito : Cadre moqueur
  • Robolectric : Framework de test unitaire qui s'exécute sans avoir besoin de Android émulateur
  • Robotium : tests d'interface utilisateur (nécessite un émulateur ou un périphérique à exécuter)

Aussi: L'utilisation de bibliothèques d'injection de dépendances telles que Dagger ou Roboguice simplifiera grandement vos tests unitaires/d'intégration. Pour exécuter des tests sur plusieurs appareils, envisagez d'utiliser Spoon .

17
Nima G
  • J'utilise ActivityInstrumentationTestCase2 dans le cas d'Activités pour TDD (ou plutôt BDD), et j'écris des tests unitaires normaux pour toute la logique. Cela m'aide également à séparer la logique des activités.
  • Les applications mobiles sont par nature centrées sur l'interface utilisateur. Par conséquent, il n'est pas logique de simuler l'interface utilisateur, même si le test unitaire ressemble à un test fonctionnel.
  • Pour ajouter des extras aux intentions, vous pouvez définir une intention personnalisée pour le test ou le faire pour tous les tests en remplaçant la configuration.
  • Les mocks donnent beaucoup de problèmes sur Android, j'utilise donc des stubs.

Un exemple est donné ci-dessous. L'activité montre Hello World 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 publié la réponse. Mockito a maintenant un support raisonnablement bon pour Android. Et pour les tests, nous sommes passés d'ActivityInstrumentationTestCase2 à Robolectric, juste pour exploiter la vitesse de la JVM dans la phase de développement. Le Android Testing Framework est idéal pour l'intégration et les tests fonctionnels, mais pas pour les tests unitaires.

4
Abhinav Manchanda

Pour appliquer TDD pour Android, Android Testing Codelab vous sera très utile. Le laboratoire de code montre une utilisation de l'outil de test et comment vous pouvez appliquer TDD pour Android.Je l'ai essayé et cela m'a été très utile.

Bonus: Vérifiez Clean Architecture

2
Vijay Vankhede

Android Testing Support Library fournit un cadre complet pour tester Android apps. Cette bibliothèque fournit un ensemble d'API qui vous permettent de créer et d'exécuter rapidement du code de test pour vos applications, y compris JUnit 4 et les tests d'interface utilisateur fonctionnelle (UI). Vous pouvez exécuter des tests créés à l'aide de ces API à partir de Android Studio IDE ou depuis la ligne de commande.

En savoir plus sur:

Je vous remercie :)

1
Pratik Butani

on a

https://developer.Android.com/training/testing/start/index.html

et peut en mesure de tester des tests locaux (s'exécute sur JVM) et instrumentaux (s'exécute sur l'appareil ou l'émulateur)

Pour cela, nous devons ajouter

Android Testing Support Library

Le SDK Android SDK comprend deux outils pour tester les applications au niveau fonctionnel

Singe et monkeyrunner

0
sssvrock