Développement piloté par Android

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). Je me suis familiarisé avec Robotium pour le test de scénario utilisateur, et cela fonctionne très 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. Je suis passé par ce blog http://sites.google.com/site/androiddevtesting/ et à travers ce http://sdudzin.blogspot.com/2011/01/easy-unit-testing-for-android.html , qui suggère le fait de se moquer des applications Android est encore très limité et a suggéré d’utiliser PowerMock, jMockit, JeasyTest ou Roboelecsortingc (en combinaison avec Mockito et Maven) et même RoboGuice.

Je souhaiterais obtenir des suggestions de votre part sur la structure de test unitaire qui, à votre avis, est la meilleure pour tester les applications Android. (en particulier tester les classes Android, en donnant éventuellement des simulacres de Contextes et d’autres fonctionnalités moqueuses pour que mes scénarios de test soient aussi indépendants que possible). Toute suggestion ou indication serait utile. Merci

Pour les tests hors appareil, consultez Robolecsortingc

Pour les tests sur périphérique, consultez Borachio

En résumé: il est toujours très difficile de bien faire. Les choses s’améliorent (la situation est nettement meilleure aujourd’hui qu’il ya 6 mois), mais Android est confortablement l’environnement le plus hostile pour lequel j’ai écrit des programmes.

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

  • assertj-android : assertions pour Android
  • Mockito : cadre moqueur
  • Robolecsortingc : framework de test unitaire qui fonctionne sans avoir besoin d’un émulateur Android
  • Robotium : tests d’interface utilisateur (nécessite un émulateur ou un périphérique à exécuter)

En outre, l’utilisation de bibliothèques d’dependency injections telles que Dagger ou Roboguice simplifiera grandement vos tests d’unité / d’intégration. Pour exécuter des tests sur plusieurs périphériques, envisagez d’utiliser Spoon .

  • 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, cela n’a aucun sens de simuler l’interface utilisateur, même si cela fait que le test unitaire ressemble à un test fonctionnel.
  • Pour append 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 posent beaucoup de problèmes sur Android, donc j’utilise des stubs.

Un exemple est donné ci-dessous. L’activité montre Hello World lorsque vous cliquez sur un bouton –

public class HelloWorldActivityTest extends ActivityInstrumentationTestCase2 { 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 un support raisonnablement bon pour Android. Et pour les tests, nous sums passés de ActivityInstrumentationTestCase2 à Robolecsortingc, juste pour exploiter la vitesse de JVM en phase de développement. Le cadre de test Android est idéal pour les tests d’intégration et fonctionnels, mais pas pour les tests unitaires.

Pour appliquer TDD pour Android, Android Testing Codelab vous sera très utile. Code lab 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: Check Clean Architecture

Android Testing Support Library fournit un cadre complet pour tester les applications Android. 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 les tests JUnit 4 et l’interface utilisateur fonctionnelle. Vous pouvez exécuter des tests créés à l’aide de ces API à partir de l’IDE Android Studio ou à partir de la ligne de commande.

En savoir plus sur:

  • Expresso
  • AndroidJunitRunner
  • Règles JUnit4
  • UI Automator

Je vous remercie 🙂

nous avons

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

et peut tester des tests locaux (s’exécute sur JVM) et des tests instrumentaux (s’exécute sur un périphérique ou un émulateur)

Pour cela nous devons append

 Android Testing Support Library 

Le SDK Android comprend deux outils pour tester les applications fonctionnelles

Singe et monkeyrunner